web-dev-qa-db-ja.com

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

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);

私はこのようにコードを変更しましたそれは私のコメントチェックelse部分のようにエラーを出します

9
TinTin

これを試して、

else
    {
        sBO.Client_id = System.Data.SqlTypes.SqlInt32.Null;
    }
21
ACP

あなたが何を意味するのかは完全には明らかではありません。 SQLパラメータでnull値を渡そうとしている場合は、 DBNull.ValueSqlParameter (または使用しているタイプは何でも)。 C#でNULL可能整数を表現する場合は、int?(またはNullable<int>-同じものです)を使用します。

Null値を通常のnull不可能な値型変数に格納することはできません。 null許容値型は引き続き構造体ですが、null許容型をラップし、ブール値を追加して、それが「実際の」値であるかnullであるかを示します。 C#はその周りにシンタックスシュガーを追加し、割り当て、さまざまな変換、リフトされた演算子などにnullリテラルを使用できるようにします。

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

それでも問題が解決しない場合は、あなたがやろうとしていることについての詳細を教えてください。

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

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

4
Jon Skeet

試してください DBNull.Value ;たとえば:

dbParamId.Value = (object)MyID ?? DBNull.Value;
2
KMån

sQLからC#へ>

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

c#からSQLへ>

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

1
riffnl

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

sBO.Client_id = DBNull.Value

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

1
user2516122

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

var Result = ParamValue as int?;

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

0
Larry