2016-10-03 3 views
-3

は私が持っているコードですが、私は、チェックボックスを実装する方法がわからないと思います。 ありがとうございました。C#がデータベースにSQLクエリ以下</p> <p>をブール値を更新する方法SQLクエリ

SQLインジェクションの問題を解決するコードを更新しました。 SQL Serverの、bool

con.Open(); 
OleDbCommand cmd = new OleDbCommand(String.Concat("Select * From ", comboBox1.Text), con); 
cmd.CommandType = CommandType.Text; 
string tableName = comboBox1.Text.ToString(); 

cmd.CommandText = @"UPDATE [" + tableName + "] SET" 
    +"People_Call_Status = @People_Call_Status," 
    +"[email protected]_Date," 
    + "tblCompanies_Area_Dialling_Code = @tblCompanies_Area_Dialling_Code," 
    + "Work_Number = @Work_Number," 
    + "building_Address = @building_Address," 
    + "[Street Address] = @[Street Address]," 
    + "suburb = @suburb," 
    + "city = @city," 
    + "res_Code = @res_Code," 
    + "industry_Vertical_ID = @industry_Vertical_ID," 
    + "pO_Box = @pO_Box," 
    + "post_Office = @post_Office," 
    + "postal_Code = @postal_Code," 
    + "country_ID = @country_ID," 
    + "province_ID = @province_ID," //this line 
    + "prospect = @prospect" 
    + "WHERE Company_ID = @Company_ID "; 

cmd.Parameters.AddWithValue("@People_Call_Status", Status_textBox1.Text); 
cmd.Parameters.AddWithValue("@Research_Date", Date_textBox.Text); 
cmd.Parameters.AddWithValue("@Company_Name", company_NameTextBox.Text); 
cmd.Parameters.AddWithValue("@tblCompanies_Area_Dialling_Code", tblCompanies_Area_Dialling_CodeTextBox.Text); 
cmd.Parameters.AddWithValue("@Work_Number", work_NumberTextBox.Text); 
cmd.Parameters.AddWithValue("@building_Address", building_AddressTextBox.Text); 
cmd.Parameters.AddWithValue("@[Street Address]", street_AddressTextBox.Text); 
cmd.Parameters.AddWithValue("@suburb", suburbTextBox.Text); 
cmd.Parameters.AddWithValue("@city", cityTextBox.Text); 
cmd.Parameters.AddWithValue("@res_Code", res_CodeTextBox.Text); 
cmd.Parameters.AddWithValue("@industry_Vertical_ID", industry_Vertical_IDTextBox.Text); 
cmd.Parameters.AddWithValue("@pO_Box", pO_BoxTextBox.Text); 
cmd.Parameters.AddWithValue("@post_Office", post_OfficeTextBox.Text); 
cmd.Parameters.AddWithValue("@postal_Code", postal_CodeTextBox.Text); 
cmd.Parameters.AddWithValue("@country_ID", country_IDTextBox.Text); 
cmd.Parameters.AddWithValue("@province_ID", province_IDTextBox.Text); 
cmd.Parameters.AddWithValue("@prospect", prospectCheckBox.Checked);          
cmd.Parameters.AddWithValue("@Company_ID", company_IDTextBox.Text); 

cmd.ExecuteNonQuery(); 
{ 
    MessageBox.Show("Update Success!"); 
    con.Close(); 
} 
+3

1.あなたのコードはSQLインジェクションに脆弱です。 2「働いていません」はあなたが直面している問題の有効な説明ではありません。あなたが望むものを慎重に記述することによってあなたを助けてください... – Adimeus

+0

'Checked'プロパティは' bool'です。あなたの 'prospect'列もboolかbit型ですか?その場合は、 'Before'と 'After'の後にCheckedプロパティを追加してください。そして@AdimeusはコードがSQLインジェクションに対して脆弱だと言ったので、パラメータを使ってみてください。 –

+0

データベースのブール値を更新する方法を教えてもらえませんか? – SouthAfricanGuy

答えて

1

01値をbitデータ型としてマッピングされます。

だから、あなたが何をする必要があるかです:

"', prospect = '" + prospectCheckBox.Checked ? 1 : 0 

サイド注:

が、これはSQLインジェクションの脆弱性で、ユーザーのデータ入力からクエリを構築するために文字列を連結しないでください。代わりに、パラメータ化されたクエリまたはストアドプロシージャを使用します。

0

どのDBMSプラットフォームを使用していますか?テーブルのDDLを表示できますか?

私はこれが動作する保証はなく、代わりに明示的なタイプでAddメソッドを使用してAddWithValue試みを使用しての宣言することはできません。

cmd.Parameters.Add(new OleDbParameter("@People_Call_Status", OleDbType.VarChar)); 
cmd.Parameters.Add(new OleDbParameter("@Research_Date", OleDbType.VarChar)); 
... 
cmd.Parameters.Add(new OleDbParameter("@prospect", OleDbType.Boolean)); 
cmd.Parameters.Add(new OleDbParameter("@Company_ID", OleDbType.VarChar)); 

cmd.Parameters[0].Value = Status_textBox1.Text; 
cmd.Parameters[1].Value = Date_textBox.Text; 
... 
cmd.Parameters[16].Value = prospectCheckBox.Checked; 
cmd.Parameters[17].Value = company_IDTextBox.Text; 

はまた、SQLインジェクションに関して、あなたはまだ理論的な脆弱性を持っています:

cmd.CommandText = @"UPDATE [" + tableName + "] SET" 
    + "People_Call_Status = @People_Call_Status," 
    + "[email protected]_Date," 
    ... 
    + "prospect = @prospect" 
    + "WHERE Company_ID = @Company_ID "; 

tableName変数はそれのようにこの文字列か何かが含まれていた場合、私はそれがあいまいな可能性だ実現、しかし:

Table1 set foo = 'bar'; 
truncate table ba2; 
update table3 

コンパイル、実行、およびあなたが気にしていたこと以外の何かを見ることができます。繰り返しますが、これは到達していると認識しています。入力はコンボボックスから来ていますが、それでも理論上のリスクです。