使用Access表(Customers)和两个字段(CustomerID,CustomerName):
string queryString = "INSERT INTO Customers (CustomerID, CompanyName) VALUES (qqq, xyz)";
OleDbCommand command = new OleDbCommand(queryString, connection);
command.ExecuteNonQuery();
导致错误:
没有给出一个或多个必需参数的值
两个字段都有文本数据类型
答案 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();
实际上我不知道qqq
和xyz
是什么。但是将它们嵌入到sql字符串中会导致它们被视为参数占位符,因此引擎会要求两个参数。
答案 1 :(得分:1)
我强烈怀疑,因为您使用了qqq
和xyz
而没有单引号,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
部分。