2016-05-16 10 views
0
private void button2_Click(object sender, EventArgs e) 
{ 
     // my sql server connection 
     con = new SqlConnection(@"Data Source=dasranrajlui\sqlexpress;Initial Catalog=SESoriginal;Integrated Security=True"); 

     con.Open(); 

     // this is to save my values to sql 
     com = new SqlCommand(" insert into VoterRegistration (SALUTATION, NAME, SEX, ETHNICITY, MARITALSTATUS, ICNUMBER, HPNUMBER, DOB, ADDRESS, STATE, CITY, POSTCODE, VoterPic) VALUES ('" 
             + SALUTATION.Text + "','" 
             + NAME.Text + "','" 
             + SEX.Text + "','" 
             + ETHNICITY.Text + "','" 
             + MARITALSTATUS.Text + "','" 
             + ICNUMBER.Text + "','" 
             + HPNUMBER.Text + "','" 
             + DOB.Text + "','" 
             + ADDRESS.Text + "','" 
             + STATE.Text + "','" 
             + CITY.Text + "','" 
             + POSTCODE.Text + "'," 
             + "@VoterPic" + ")", con); 

     conv_photo(); 

     try 
     { 
      com.ExecuteNonQuery(); 
      MessageBox.Show("Registered..."); 

      // return back to admin page after registered 
      this.Hide(); 
      AdminVoterREUP RETURNTOREUP = new AdminVoterREUP(); 
      RETURNTOREUP.Show(); ; 
     } 
     catch (Exception EX) 
     { 
      MessageBox.Show(EX + "Not Registered"); 
     } 
     finally 
     { 
      con.Close(); 
     } 
} 

void conv_photo() 
{ 
     //to convernt my image 
     if (VOTERPIC.Image != null) 
     { 
      ms = new MemoryStream(); 
      VOTERPIC.Image.Save(ms, ImageFormat.Jpeg); 
      byte[] photo_aray = new byte[ms.Length]; 
      ms.Position = 0; 
      ms.Read(photo_aray, 0, photo_aray.Length); 
      com.Parameters.AddWithValue("@VoterPic", photo_aray); 
     } 
    } 
} 

私はこのコードを実行すると、私はエラーを取得する:挿入値

System.Data.SqlClient.SqlExeption (0x80131904): Must declare the scalar variable "@VoterPic".

voterPicは私の画像を保存するためにSQL Serverでの私のコラム名で、私はまたVOTERPICとしての私のPictureBox命名。

誰も私を助けてくれますか?

+5

SQLインジェクションとフォーマットエラーを避けるためにパラメータを使用します。 – LarsTech

答えて

0

まずあなたが最初にバイト配列にあなたのイメージを変換する必要があり、その後、パラメータとしてバイトを追加

com.Parameters.Add("@VoterPic",System.Data.SqlDbType.VarBinary).Value = ImageBytes; 
2

、あなたはSQLインジェクションを防ぐために、SQLパラメータを使用する必要があります。

// my sql server connection 
var con = new SqlConnection(@"Data Source=dasranrajlui\sqlexpress;Initial Catalog=SESoriginal;Integrated Security=True"); 

con.Open(); 

// this is to save my values to sql 
var com = new SqlCommand(@"insert into VoterRegistration (
     SALUTATION, 
     NAME, 
     SEX, 
     ETHNICITY, 
     MARITALSTATUS, 
     ICNUMBER, 
     HPNUMBER, 
     DOB, 
     ADDRESS, 
     STATE, 
     CITY, 
     POSTCODE, 
     VoterPic) VALUES (
     @Salutation, 
     @Name, 
     @Sex, 
     @Ethnicity, 
     @MaritalStatus, 
     @ICNumber, 
     @HPNumber, 
     @Dob, 
     @Address, 
     @State, 
     @City, 
     @PostCode 
     @VoterPic)", con); 

com.CommandType = CommandType.Text; 

com.Parameters.AddWithValue("@Salutation", SALUTATION.Text); 
com.Parameters.AddWithValue("@Name", NAME.Text); 
com.Parameters.AddWithValue("@Sex", SEX.Text); 
com.Parameters.AddWithValue("@Ethnicity", ETHNICITY.Text); 
com.Parameters.AddWithValue("@MaritalStatus", MARITALSTATUS.Text); 
com.Parameters.AddWithValue("@ICNumber", ICNUMBER.Text); 
com.Parameters.AddWithValue("@HPNumber", HPNUMBER.Text); 
com.Parameters.AddWithValue("@Dob", DOB.Text); 
com.Parameters.AddWithValue("@Address", ADDRESS.Text); 
com.Parameters.AddWithValue("@State", STATE.Text); 
com.Parameters.AddWithValue("@City", CITY.Text); 
com.Parameters.AddWithValue("@PostCode", POSTCODE.Text); 

その後、 conv_photo()の場合は、次のように置き換えてパラメータのタイプを指定する必要があります。

com.Parameters.AddWithValue("@VoterPic", photo_aray); 

com.Parameters.Add("@VoterPic", SqlDbType.VarBinary, photo_aray.Length).Value = photo_aray; 
+0

ここで私はこれを追加します –

+0

'conv_photo'メソッドで' com.Parameters.AddWithValue( "@ VoterPic"、photo_aray);を置き換える必要があります。 – PhilDulac

+0

まだ同じエラーがあります –