OleDbCommand,没有给出任何价值

时间:2014-12-12 15:02:40

标签: c# oledbcommand

使用Access表(Customers)和两个字段(CustomerID,CustomerName):

string queryString = "INSERT INTO Customers (CustomerID, CompanyName)  VALUES (qqq, xyz)";
OleDbCommand command = new OleDbCommand(queryString, connection);
command.ExecuteNonQuery();

导致错误:

  

没有给出一个或多个必需参数的值

两个字段都有文本数据类型

2 个答案:

答案 0 :(得分:1)

您应该使用参数化查询

将值传递给数据库引擎
string queryString = "INSERT INTO Customers (CustomerID, CompanyName)  VALUES (?,?)";
OleDbCommand command = new OleDbCommand(queryString, connection);
command.Parameters.AddWithValue("@p1", valueForCustomerIDFIeld)
command.Parameters.AddWithValue("@p2", valueForComapnyNameFIeld)
command.ExecuteNonQuery();

实际上我不知道qqqxyz是什么。但是将它们嵌入到sql字符串中会导致它们被视为参数占位符,因此引擎会要求两个参数。

答案 1 :(得分:1)

我强烈怀疑,因为您使用了qqqxyz而没有单引号,OleDbCommand将它们视为参数。这就是为什么它需要两个参数值的原因。

因为如果它们是字符串,它们将与单引号一起使用,如;

INSERT INTO Customers (CustomerID, CompanyName)  VALUES ('qqq', 'xyz')

如果它们是某些变量,并且想要将它们添加到您的命令中,则应始终使用parameterized queries来阻止SQL Injection攻击。

using(OleDbConnection connection = new OleDbConnection(conString))
using(OleDbCommand command = _connection.CreateCommand())
{
    command.CommandText = "INSERT INTO Customers(CustomerID, CompanyName) VALUES(?, ?)";
    command.Parameters.Add("@p1", OleDbType.VarChar).Value = qqq;
    command.Parameters.Add("@p2", OleDbType.VarChar).Value = xyz;
    connection.Open();
    command.ExecuteNonQuery();
}

CustomerID是字符列的非常错误名称,因为它是用于数值的一般ID部分。