【问题标题】:C# How to update bool in a database a sql queryC#如何更新数据库中的bool一个sql查询
【发布时间】:2016-10-04 08:52:59
【问题描述】:

如何通过sql查询更新数据库中的bool

以下是我拥有的代码,但我不确定如何实现该复选框。 感谢您的帮助。

我已更新代码以消除 sql 注入问题。

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,"
    +"Research_Date=@Research_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();
}

【问题讨论】:

  • 1.您的代码容易受到 sql 注入的攻击。 2 “不工作”不是对您所面临问题的有效描述,请通过仔细描述您想要的内容来帮助我们帮助您...
  • Checked 属性是 bool。您的prospect 列也是布尔类型还是位类型?如果是这样,请尝试在将 Checked 属性添加到语句之前和之后删除 '。正如@Adimeus 所说,您的代码容易受到 SQL 注入的影响,请尝试使用参数。
  • 所以你没有办法帮助我如何更新数据库中的布尔值?

标签: c# sql checkbox


【解决方案1】:

在 SQL Server 中,bool 映射为具有 01 值的 bit 数据类型。

所以你需要做的是:

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

旁注:

不要连接字符串来根据用户数据输入构建查询,这很容易受到 SQL 注入的攻击。相反,请使用参数化查询或存储过程。

【讨论】:

    【解决方案2】:

    您使用的是什么 DBMS 平台,您能否显示该表的 DDL?

    我不能保证这会起作用,但不要使用AddWithValue,而是尝试使用声明了显式类型的Add 方法:

    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,"
        + "Research_Date=@Research_Date,"
        ...
        + "prospect = @prospect"
        + "WHERE Company_ID = @Company_ID ";
    

    我意识到这是一种模糊的可能性,但如果 tableName 变量包含这个字符串或类似的东西:

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

    您可以看到它会如何编译、执行和做一些您没有想到的事情。再一次,我意识到这已经达到了,并且您的输入确实来自组合框,但这仍然是理论上的风险。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-29
      • 2021-02-23
      • 2023-02-06
      • 1970-01-01
      • 2017-09-19
      • 1970-01-01
      相关资源
      最近更新 更多