c# - 将空字符串添加到参数列表以插入到 AccessDB

标签 c# asp.net-mvc-4 parameters oledb

我正在尝试使用 System.Data.OleDb 命名空间和方法 OleDbCommandObject.ExecuteNonQuery() 将数据插入到 Access 数据库中,但我收到如下错误:

The OleDbParameterCollection only accepts non-null OleDbParameter type objects. Parameter name: value

Parameter ? _[#] has no default value

我的大部分参数都是字符串对象,当通过表单为它们分配值时,它们可以正常工作。但是,当一个非必填字段留空(即 someString = "")并提交表单时,就会发生错误。我在这个网站和其他提到可能解决方案的网站上四处寻找答案,例如:

  • OleDb 使用 ?而不是名称值
  • 确保参数的数量与 ? 的数量相匹配,并且它们以正确的顺序插入。
  • 使用 command.Parameters.Add(new OleDbParameter("Name", OleDbType.VarChar, 50, "Column").Value = someString);或类似的东西。
  • 使用 command.Parameters.AddWithValue("parameterName", someString);

我可以将字符串的值设置为“[space]”,但这会删除表单中的占位符,这并不理想,而且我认为没有必要。如果我必须在将值添加到参数列表之前检查空字符串并添加空格,那么我会这样做,但我希望尽可能避免额外的代码。

这是我使用的代码示例:

Customer.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。任何可以引导我走向正确方向的帮助或信息将不胜感激。

最佳答案

改变这个

public int InsertValues(Customer customer)
{
this.dbConn.Open(); //System.Data.OleDb.OleDbConnection

this.query = "INSERT INTO someTable (ContactFirstName, ContactLastName, Email, Phone) VALUES (@ContactFirstName,@ContactLastName,@Email,@Phone)";
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--
}

关于c# - 将空字符串添加到参数列表以插入到 AccessDB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17096124/

相关文章:

c# - 附加和更新 bool 值或 int 并不总是有效

c# - 使用 Data Reader 访问两个数据库

c# - 由于 InitializedDatabases 列表,EntityFramework6 内存使用量较大,表数量较多

jquery - 部分 View - 客户端验证不适用于 jquery ajax post

asp.net-mvc - asp.net mvc : thousand separator for int value

html - 如何让 div 溢出底部的其他内容?

c++ - 正确使用 Eigen::Ref<> 类

c# - 什么是在另一个被调用的方法中的方法?

php - 许多可选参数

c# - 如何在 UML 中表示索引或参数化属性?