2016-12-02 3 views
0

zu speichern Ich speicherte Bild in meiner SQL Server-Datenbank in einer Spalte des Datentyps (Binary) und es ist Erfolgreich gespeichert. Jetzt muß ich es in meiner Datenliste abrufen, aber ich habe diesen Fehler:Kann Objekt des Typs 'System.Int32' nicht umwandeln, um 'System.Byte []' in get Image-Daten von SQL Server

Kann nicht das Objekt des Typs ‚System.Int32‘ werfen ‚System.Byte‘

Typ I zu erkennen, werde jemand meinen Code überprüfen, ob, wo ich

verwechseln haben
private void button1_Click(object sender, EventArgs e) 
    { 
     try 
     { 
      string sql = "SELECT Name,[Last Name],[Father Name],[Passport Number],Sh_ID ,I_ID,Email,[Phone Number], [Address], [Attorney In Iran], [Application Text] ,[Application Title Code] ,[Total Payment] ,[Total Paid],[Iran Case Status],[USA Case Status],Balance,[Customer picture] from permanentCustomer where (I_ID='"+textBoxIDN.Text+"' and [Last Name]='"+textBoxLN.Text+"') or (Sh_ID='"+textBoxBCN.Text+"' and [Last Name]='"+textBoxLN.Text+"') or Sh_ID='"+textBoxBCN.Text+"' or I_ID='"+textBoxIDN.Text+"' "; 
      if (conn.State != ConnectionState.Open) 
       conn.Open(); 
      // MessageBox.Show("1"); 
      command = new SqlCommand(sql, conn); 
      // MessageBox.Show("2"); 
      SqlDataReader reader = command.ExecuteReader(); 
      //MessageBox.Show("3"); 
      reader.Read(); 
      // MessageBox.Show("4"); 
      if (reader.HasRows) 
      { 
       textBoxFN.Text = reader[0].ToString(); 
       textBoxLN.Text = reader[1].ToString(); 
       textBoxFatherN.Text = reader[2].ToString(); 
       textBoxPN.Text = reader[3].ToString(); 
       textBoxBCN.Text = reader[4].ToString(); 
       textBoxIDN.Text = reader[5].ToString(); 
       textBoxEmail.Text = reader[6].ToString(); 
       textBoxPhoneN.Text = reader[7].ToString(); 
       textBoxAddress.Text = reader[8].ToString(); 
       textBoxAI.Text = reader[9].ToString(); 
       richTextBoxAT.Text = reader[10].ToString(); 

       textBoxTPayments.Text = reader[11].ToString(); 
       textBoxTPaid.Text = reader[12].ToString(); 
       textBoxICS.Text = reader[13].ToString(); 
       textBoxUCS.Text = reader[14].ToString(); 
       textBoxbalance.Text = reader[15].ToString(); 
       byte[] img = (byte[])(reader[16]); 
       if (img == null) { picCustomer.Image = null; } 
       else { MemoryStream ms = new MemoryStream(img); } 


      } 
      else { MessageBox.Show("This Record is not exist!"); } 
      conn.Close(); 
     } 
     catch(Exception ex) 
     { 
      conn.Close(); 
      MessageBox.Show(ex.Message); 
     } 
    } 
+0

Ich denke, Sie sollten [gesetzt visuelle Studio, um Ausnahmen zu unterbrechen.] (https://msdn.microsoft.com/en-us/library/d14azbfh (v = vs.110) .aspx) – radarbob

+1

[SQL-Injection-Warnung] (http://msdn.microsoft. com/de-us/library/ms161953% 28v = sql.105% 29.aspx) - Sie sollten ** nicht ** Ihre SQL-Anweisungen miteinander verketten - verwenden Sie stattdessen ** parametrisierte Abfragen **, um die SQL-Injektion –

+0

'image' zu ​​vermeiden Der Datentyp ist ** veraltet ** und wird in einer zukünftigen Version von SQL Server entfernt. Vermeiden Sie die Verwendung dieses Datentyps in neuen Entwicklungsarbeiten, und planen Sie, Anwendungen zu ändern, die sie derzeit verwenden. Verwenden Sie stattdessen 'varbinary (max)'. [Siehe Details hier] (http://msdn.microsoft.com/en-us/library/ms187993.aspx) –

Antwort

3

Sie diesen Fehler erhalten, da der Index nicht korrekt scheint:

byte[] img = (byte[])(reader[17]);  // instead of 16, if I counted correctly 

sollte funktionieren. Verwendung von String-Indexer statt jedoch integer man wird dringend empfohlen, diese Art von Fehler zu vermeiden und auch in der Lage sein, Spalten hinzufügen/entfernen in der Abfrage, ohne viel Indizes zu ändern:

var img = (byte[])(reader["Customer picture"]); 
+0

Vielen Dank für Hilfe und Ihre Kommentare –

Verwandte Themen