我正在尝试使用 System.Data.OleDb 命名空间和方法 OleDbCommandObject.ExecuteNonQuery() 将数据插入 Access 数据库,但我收到以下错误:
OleDbParameterCollection 只接受非空的 OleDbParameter 类型对象。参数名称:值
和
范围 ?_[#] 没有默认值
我的大多数参数都是字符串对象,当通过表单为它们分配值时它们可以正常工作。但是,当非必填字段留空(即 someString = "")并提交表单时,就会发生错误。我在这个网站和其他提到可能的解决方案的网站上四处寻找答案,例如:
- OleDb 使用 ? 而不是名称值
- 确保参数的数量与 ? 的数量相匹配,并且它们以正确的顺序插入。
- 使用 command.Parameters.Add(new OleDbParameter("Name", OleDbType.VarChar, 50, "Column").Value = someString); 或类似的规定。
- 使用 command.Parameters.AddWithValue("parameterName", someString);
我可以将字符串的值设置为“[space]”,但这会删除表单中的占位符,这并不理想,而且我认为没有必要。如果我必须在将值添加到参数列表之前检查空字符串并添加空格,那么我会,但我希望尽可能避免额外的代码。
这是我正在使用的代码示例:
客户.cs
public class Customer
{
[Required]
public string ContactFirstName { get; set; }
[Required]
public string ContactLastName { get; set; }
public string Email {get; set; }
public string Phone {get; set; }
public Customer()
{
this.ContactFirstName = "";
this.ContactLastName = "";
this.Email = "";
this.Phone = "";
}
}
用于插入数据的方法
public int InsertValues(Customer customer)
{
this.dbConn.Open(); //System.Data.OleDb.OleDbConnection
this.query = "INSERT INTO someTable (ContactFirstName, ContactLastName, Email, Phone) VALUES (?,?,?,?)";
this.dbComm = new OleDbCommand(this.query, this.dbConn); //System.Data.OleDb.OleDbCommand
//Add parameters
this.dbComm.Parameters.AddWithValue("ContactFirstName", customer.ContactFirstName);
this.dbComm.Parameters.AddWithValue("ContactLastName", customer.ContactLastName);
this.dbComm.Parameters.AddWithValue("Email", customer.Email);
this.dbComm.Parameters.AddWithValue("Phone", customer.Phone);
this.dbComm.ExecuteNonQuery();
//--Snip--
}
我使用的 ODBC 驱动程序是 Microsoft.OleDb.ACE.12.0。任何可以引导我走向正确方向的帮助或信息将不胜感激。