9

SQL パラメータを null 値として整数データ型変数に渡す方法は?

        StockBO sBO = new StockBO();
        sBO.Mode = 2;
        if (ddcmpanyname.SelectedIndex != 0)
        {
            sBO.Client_id = Convert.ToInt16(ddcmpanyname.SelectedValue);
        }
        else
        {
            sBO.Client_id = Convert.ToInt16(DBNull.Value);//Object cannot be cast from DBNull to other types.
       sBO.Client_id =DBNull.Value;//Cannot implicitly convert type 

        }
        ds=_StockController.StockGet(sBO);

私はこのようにコードを変更しました

4

6 に答える 6

22

これを試して、

else
    {
        sBO.Client_id = System.Data.SqlTypes.SqlInt32.Null;
    }
于 2010-07-15T06:56:27.887 に答える
4

あなたが何を意味するのかは完全には明らかではありません。SQL パラメータに null 値を渡そうとする場合は、 (または使用している任意の型)DBNull.Valueの値として使用する必要があります。SqlParameterC# で null 許容整数を表現する場合は、int?(またはNullable<int>- それらは同じものです) を使用します。

通常の null 非許容値型変数に null 値を格納することはできません。Null 許容値型は引き続き構造体ですが、null 非許容型をラップし、ブール値を追加して、それが「実際の」値か null かを示します。nullC# はその周りに構文糖衣を追加し、代入、さまざまな変換、持ち上げられた演算子などにリテラルを使用できるようにします。

int? value = 5;
value = null;
if (value == null)
{
    ...
}

それでも問題が解決しない場合は、何をしようとしているのか正確な情報をお知らせください。

StockBO.Client_id編集: わかりましたので、タイプのように見えますが、直接設定することshort?はできません。クライアント ID を null 値に設定するためにDBNull.Value使用する必要があります。nullオブジェクトと SQL パラメーターと結果の間で変換を行う場合は常に、そのような変換を自分で実行する必要があります。これを定期的に行っている場合は、ヘルパー メソッドをいくつか考えて、簡単に変換できるようにしてください。

もちろん、LINQ to SQL などの使用を開始する場合は、心配する必要はありませんDBNull.Value。LINQ プロバイダーは、null 許容値型を直接サポートする傾向があります。

于 2010-07-15T05:57:33.577 に答える
2

試してみてくださいDBNull.Value。たとえば、次のようにします。

dbParamId.Value = (object)MyID ?? DBNull.Value;
于 2010-07-15T06:01:11.293 に答える
1

次のように DBNull.Value を直接割り当てることをお勧めします。

sBO.Client_id = DBNull.Value

DBNull.Value はすべてのオブジェクト用です

于 2013-06-24T11:50:14.503 に答える
1

SQL から C# へ >

int number;
Int32.TryParse(paramvalue, out number);

C# から SQL へ >

パラメータに DBNull を追加します

于 2010-07-15T05:58:41.890 に答える
0

ParamValue にクエリの結果が整数または DBNull.Value として含まれていることを考慮して、それをint にキャストしていますか? こちらです:

var Result = ParamValue as int?;

Result が null かどうかを判断するには、Result.HasValue を確認してください。それ以外の場合は、通常の整数として使用するか、Result.Value

于 2010-07-15T06:06:30.120 に答える