2017-09-15 5 views
0

このMcのアクセス列のデータ型(テキスト、数値 - 倍数、テキスト、数値 - パーセント) のように値を追加しますが、この値を挿入します(john、 ""私は名前だけのリストに私は 『System.NullReferenceException』種類の最初のチャンス例外がMさんのアクセスでnull値を挿入する方法#

biodata.exe

で発生しました追加情報

助けを持っているので」、 『』)この1つの値の値が このエラー を挿入していません: オブジェクト参照がオブジェクト インスタンスに設定されていません。

private void button1_Click(object sender, EventArgs e) 
{ 

     con.Open(); 
     cmd.CommandText = "insert into hhh (name,answerinfloat,subject,avg)VALUES('" + a.Text + "','" + b.Text + "','" + c.Text + "','" + d.Text + "')"; 

     cmd.CommandType = CommandType.Text; 

     cmd.Parameters.AddWithValue("name", a.Text); 
     cmd.Parameters.AddWithValue("answerinfloat", b.Text); 

     cmd.Parameters.AddWithValue("subject", c.Text); 
     cmd.Parameters.AddWithValue("avg", d.Text); 



     int n = cmd.ExecuteNonQuery(); 


     if (n > 0) 
     { 
      MessageBox.Show("Record Submitted", "Congrats"); 
     } 
     else 
      MessageBox.Show("insertion failed"); 

    con.Close(); 

}

+1

クエリテキストの列名を省略すると、テーブルにあるすべての列の値を指定する必要があります。単に列の名前を追加して、Sql Injectionハックが何であるかを見てみましょう。あなたのコードはハッキングされる準備ができています。 – Steve

+1

[クエリのパラメータ化](https://msdn.microsoft.com/en-us/library/system.data.oledb.oledbcommand.parameters(v = vs.110).aspx)を参照することを強くお勧めします。 。 –

+0

**警告:**あなたのコードはSQLインジェクション攻撃に対して脆弱です。文字列の連結を使用しないでください。パラメータを使用します。 –

答えて

0

あなたがに挿入される列を指定:ちょうどあなたが挿入したい列の実際の名前でCOL1、COL2などを交換

cmd.CommandText = "insert into hhh (col1,col2,col3,col4) VALUES('" + a.Text + "','" + b.Text + "','" + c.Text + "','" + d.Text + "')"; 

を。省略した列は値を取得せず、NULLになります(実際にNULLを許可している場合)。

他の人がコメントしたように、値をSQL文に連結する代わりに、パラメータ化されたクエリを使用する必要があります。コードが注入攻撃に対して脆弱になる可能性があります。

+0

はい私は知っているが、nullまたは空の行を挿入する方法を試してみるボタン –

0

おそらくあなたは@@IDENTITY列と主キーを持っているので、あなたがSQLインジェクションに対して脆弱もう一度コードを明示的に

insert into hhh(col1, col2, col3, ...) VALUES('" + 

すべての列を指定する必要が原因です。 Preventing SQL injection on insert

関連する問題