1

我有一个数据网格视图。在此 DGV 中,第一列是组合框列。I want to make, when this combobox value is selected next fild will be filled automatically from database. 但是那里显示一个错误。

没有为 OleDbDataReader dr1 = cmd1.ExecuteReader() 上的一个或多个必需参数提供值;

我发布代码。请帮我。

OleDbConnection con = new OleDbConnection(conn);
con.Open();

for (int i = 0; i < dgv.Rows.Count; i++)
{

    string query = "select Description from General where AccCode='" +
        dgv.Rows[i].Cells[0].Value +
        "' and conpanyID='" +
        label1.Text + "'";
    OleDbCommand cmd1 = new OleDbCommand(query, con);
    //OleDbDataAdapter daBranchName = new OleDbDataAdapter(cmd);
    OleDbDataReader dr1 = cmd1.ExecuteReader();
    while (dr1.Read())
    {
        dgv.Rows[i].Cells[1].Value = dr1["Description"].ToString();
    }
}
con.Close();
4

3 回答 3

6

这种字符串连接对SQL 注入攻击是开放的。

请改用参数化查询

string query = "select [Description] from [General] where AccCode= ? and conpanyID= ?";
OleDbCommand cmd1 = new OleDbCommand(query, con);
cmd1.Parameters.AddWithValue("@acc", dgv.Rows[i].Cells[0].Value);
cmd1.Parameters.AddWithValue("@ID", label1.Text);

正如 HansUp 所指出的,DescriptionGeneral保留关键字。将它们与方括号一起使用,例如[Description][General]

于 2013-09-10T13:52:59.673 回答
3

按照建议,使用参数化查询。

就错误而言,我猜这个字段名是错误的:

conpanyID=

应该:

companyID=
于 2013-09-10T13:55:02.467 回答
2

使用Parameters,否则会打开sql注入攻击。

string query = "select [Description] from General where AccCode=? and conpanyID=?";

现在您可以设置参数

cmd.Parameters.AddWithValue("@p1", val1);
cmd.Parameters.AddWithValue("@p2", val2);
于 2013-09-10T13:53:53.033 回答