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()
    }

これで、ユーザーが null 値を入力してもかまいません。その場合、どうすれば AddProduct メソッドを更新できますか? 私の頭に浮かぶ唯一のケースは、以下のように各パラメーターに対してnullチェックを行うことです..

if(product.ProductColor = null)
{
    dh.AddInParam(cmd, "@productColor", DbType.String, DbNull.Value);
}
else
{
    dh.AddInParam(cmd, "@ProductColor, DbType.String, product.ProductColor)
}

明らかな何かが欠けていますか?これらのパラメーター化されたクエリで null をチェックするための最良の方法は何ですか?

4

3 に答える 3

4

Null合体演算子が解決策になる可能性があります

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

これには、dh.AddInParam の 3 番目のパラメーターがオブジェクト データ型である必要があります (既にこのようになっているはずです)。

おそらく、この要件は AddInParam に渡すすべてのパラメーターに当てはまるため、この問題を解決する最善の方法は、渡された null 値を考慮してこのメ​​ソッドのコードを変更することです (もちろん、ソースがある場合)。

于 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

null合体演算子を使用してみてください

于 2012-07-23T09:44:55.200 に答える