1

我有一个如下所示的类,它在 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)
}

我错过了一些明显的东西吗?在这些参数化查询中检查空值的最佳方法是什么?

4

3 回答 3

4

空合并运算符可能是解决方案

dh.AddInParam(cmd, "@productId", DbType.Int32, 
                    product.ProductId ?? (object)DBNull.Value); 

这要求 dh.AddInParam 的第三个参数是对象数据类型(应该已经是这种方式了)

可能这个要求对于你传递给 AddInParam 的每个参数都是正确的,所以解决这个问题的最好方法是改变这个方法的代码来解释传入的空值。(当然,如果你有源)

于 2012-07-23T09:42:14.060 回答
2

如何使用 NULL 合并运算符?

dh.AddInParam(cmd, "@productColor", DbType.String, product.ProductColor ?? DbNull.Value);

于 2012-07-23T09:42:01.107 回答
0

尝试使用空合并运算符

于 2012-07-23T09:44:55.200 回答