"查询值和目标字段的数量不相同"

时间:2016-03-23 15:15:09

标签: c#

try
{
        connection.Open();
        OleDbCommand komanda = new OleDbCommand();
        command.Connection = konekcija;
        command.CommandText = "insert into EmployeeData (FirstName,LastName,Pay) values('"+txt_fname.Text+"','"+txt_lname.Text+"','"+txt_pay.Text+"')";
        command.ExecuteNonQuery();
        MessageBox.Show("data saved");
        connection.Close();
}
catch (Exception ex)
{
       MessageBox.Show("error"+ex);
}

1 个答案:

答案 0 :(得分:1)

问题的根源在于您实际上知道您正在执行的查询。因为您正在执行用户发送给您的任何代码

在大多数非边缘情况下,这个出现以“工作得很好”(这就是为什么它经常被忽视),在某些情况下它会导致查询中的语法或结构错误(这是这里发生了什么),在某些情况下,用户可以利用它在数据库上执行任意代码。

这称为SQL injection漏洞。

您可以使用将用户输入视为而不是可执行代码的查询参数来更正此问题。像这样:

String

请注意,我已经猜到列的command.CommandText = "insert into EmployeeData (FirstName,LastName,Pay) values(?,?,?)"; command.Parameters.Add("@FirstName", OleDbType.VarChar, 50).Value = txt_fname.Text; command.Parameters.Add("@LastName", OleDbType.VarChar, 50).Value = txt_lname.Text; command.Parameters.Add("@Pay", OleDbType.VarChar, 50).Value = txt_pay.Text; command.ExecuteNonQuery(); 和大小。根据您的桌面结构进行调整。