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部分のようにエラーを出します
これを試して、
else
{
sBO.Client_id = System.Data.SqlTypes.SqlInt32.Null;
}
あなたが何を意味するのかは完全には明らかではありません。 SQLパラメータでnull値を渡そうとしている場合は、 DBNull.Value
を SqlParameter
(または使用しているタイプは何でも)。 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許容値型を直接サポートする傾向があります。
試してください DBNull.Value
;たとえば:
dbParamId.Value = (object)MyID ?? DBNull.Value;
sQLからC#へ>
int number;
Int32.TryParse(paramvalue, out number);
c#からSQLへ>
パラメータにDBNullを追加します
次のようにDBNull.Valueを直接割り当てることをお勧めします。
sBO.Client_id = DBNull.Value
DBNull.Valueはすべてのオブジェクト用です
ParamValueに整数またはDBNull.Valueとしてクエリの結果が含まれていることを考慮して、次のようにキャストしますint?:
var Result = ParamValue as int?;
Resultがnullかどうかを判断するには、Result.HasValueを確認してください。それ以外の場合は、通常の整数、またはResult.Valueとして使用します