2016-09-10 20 views
5

Napisałem następujący kod, aby przekazać zdjęcie z bazy danych do paki w C#. Dostałem ten kod z Microsoft. Tutaj jest URL tej strony. MicrosoftParametr jest nieprawidłowy wyjątek w C#

Po uruchomieniu tego kodu parametr wyświetlania jest niepoprawny.

Co jest nie tak z tym kodem?

private void button2_Click(object sender, EventArgs e) 
{ 
    try 
    { 
     String strCn [email protected]"Data Source=DESKTOP-ROF2H0M\BHAGI;Initial Catalog=Golden;Integrated Security=True"; 

     SqlConnection cn = new SqlConnection(strCn); 
     cn.Open(); 


     //Retrieve BLOB from database into DataSet. 
     SqlCommand cmd = new SqlCommand("SELECT User_id ,img FROM login", cn); 
     SqlDataAdapter da = new SqlDataAdapter(cmd); 
     DataSet ds = new DataSet(); 
     da.Fill(ds, "login"); 
     int c = ds.Tables["login"].Rows.Count; 


     if (c > 0) 
     { //BLOB is read into Byte array, then used to construct MemoryStream, 
      //then passed to PictureBox. 
      Byte[] byteBLOBData = new Byte[0]; 
      byteBLOBData = (Byte[])(ds.Tables["login"].Rows[c-1]["img"]); 
      MemoryStream stmBLOBData = new MemoryStream(byteBLOBData); 
      pictureBox1.Image = Image.FromStream(stmBLOBData); 
     } 
     cn.Close(); 

    } 
    catch (Exception ex) 
    { 
     MessageBox.Show(ex.Message); 
    } 
} 

Otrzymałem następujący komunikat o błędzie.

nieobsługiwany wyjątek typu 'System.ArgumentException' wystąpił w System.Drawing.dll

Dodatkowe informacje: Parametr jest niepoprawny.

Oto przystawka do mojej bazy danych. LOgin Table

+0

mógłbyś udostępnić więcej informacji na temat 'wyświetlanego parametru nie jest prawidłowy exception' –

+0

@ThomasAyoub Herezje erorr komunikat dostałem => Nieobsługiwany wyjątek typu "System.ArgumentException" wystąpił w System.Drawing.dll Dodatkowe informacje: Parametr jest niepoprawny. – Pegasus008

+0

Ten komunikat o błędzie jest zwykle podawany, gdy obraz dostarczony do 'PictureBox' jest nieprawidłowy. Zapisz najpierw tablicę bajtów do pliku (jako etap debugowania), aby potwierdzić poprawność obrazu; Prawdopodobnie tak nie będzie. –

Odpowiedz

2

masz 3 problem (Wydajność & Bezpieczeństwo emisyjnej):

  1. Musisz obsługiwać połączeń programu SQL
  2. trzeba przechowywać pliki (binarne & Zdjęcia) na dysku (brak bazy)
  3. Nigdy nie próbuj przechowywać hasła użytkowników bez szyfrowania (np. MD5)

private void button2_Click(object sender, EventArgs e) 
{   
    string strCn = @"Data Source=DESKTOP-ROF2H0M\BHAGI;Initial Catalog=Golden;Integrated Security=True"; 
     using (var cn = new SqlConnection(strCn)) 
     { 
      try 
      { 
       cn.Open(); 
       using (var cmd = new SqlCommand("SELECT User_id ,imgUrlOnDisk FROM login", cn)) 
       { 
        using (var dr = cmd.ExecuteReader()) 
        { 
         if (dr.HasRows) 
         { 
          if (dr.Read()) 
          { 
           pictureBox1.Image = Image.FromFile(Convert.ToString(dr["imgUrlOnDisk"])); 
          } 
         } 
        } 
       } 
      } 
      catch (Exception ex) 
      { 
       MessageBox.Show(ex.Message); 
      } 
      finally 
      { 
       if (cn.State != ConnectionState.Closed) 
       { 
        cn.Close(); 
       } 
      } 
     } 
} 

Najlepszy sposób, że proponuję użyć kwerendy ADO.NET jest taka:

try 
{ 
    using (SqlCommand cmd = new SqlCommand(Query, Connection)) 
    { 
      try 
      { 
       cmd.CommandType = CommandType; 
       foreach (var p in InParameters) 
       { 
        cmd.Parameters.Add(p); 
       } 
       cmd.Connection.Open(); 
       affectedRows = cmd.ExecuteNonQuery(); 
       if (affectedRows == 0) 
       { 
        //Zero Record Success 
       } 
       else 
       { 
        if (affectedRows > 1) 
        { 
         //Many Record Success 
        } 
        else 
        { 
         //One Record Success 
        } 
       } 
      } 
      catch (Exception InnerEx) 
      { 
       //Handle your error 
      } 
      finally 
      { 
       if (cmd.Connection.State != ConnectionState.Closed) 
       { 
        cmd.Connection.Close(); 
       } 
      } 
     } 
} 
+0

Wyrażenie "używanie" byłoby bardziej zwięzłe. Twój również używa innych obiektów, które implementują 'IDisposable', które nie są usuwane poprawnie. – Dai

+0

@Dai O innych obiektach używaj, masz rację, ale wykorzystaj to nie inaczej z moim kodem –

+0

@ImranShams Nadal pojawia się ten błąd. – Pegasus008

Powiązane problemy