我有一个如下所示的类,它在Access 2007中有一个相应的表
Class Product
{
public int ProductId
{
get;set;
}
public string ProductName
{
get;set;
}
public string ProductColor
{
get;set;
}
}
这是我用于将产品添加到数据库的方法。
public static void AddProduct(Product product)
{
con.Open();
string strSql = @"INSERT INTO PRODUCTS (PRODUCTID,PRODUCTNAME,PRODUCTCOLOR)
VALUES(?,?,?)";
IDbCommand cmd = con.CreateCommand();
cmd.CommandText = strSql;
dh.AddInParam(cmd, "@productId", DbType.Int32, product.ProductId);
dh.AddInParam(cmd, "@productName", DbType.String, product.ProductName);
dh.AddInParam(cmd, "@productColor", DbType.String, product.ProductColor);
cmd.ExecuteNonQuery();
con.Close()
}
现在我不介意用户是否输入了一些空值。在那种情况下,我如何更新AddProduct方法? 我想到的唯一情况是对每个参数进行空检查,如下所示。
if(product.ProductColor = null)
{
dh.AddInParam(cmd, "@productColor", DbType.String, DbNull.Value);
}
else
{
dh.AddInParam(cmd, "@ProductColor, DbType.String, product.ProductColor)
}
我错过了一些明显的东西吗?在这些参数化查询中检查空值的最佳方法是什么?
答案 0 :(得分:4)
Null coalescing运营商可能是解决方案
dh.AddInParam(cmd, "@productId", DbType.Int32,
product.ProductId ?? (object)DBNull.Value);
这要求dh.AddInParam的第三个参数是对象数据类型(它应该是这样的)
对于传递给AddInParam的每个参数,此要求可能都是正确的,因此解决此问题的最佳方法是更改此方法的代码以考虑传入的空值。(当然,如果您有源代码)
答案 1 :(得分:2)
如何使用NULL合并运算符?
dh.AddInParam(cmd, "@productColor", DbType.String, product.ProductColor ?? DbNull.Value);
答案 2 :(得分:0)
尝试使用空合并运算符