2

12 個のパラメーターを持つストアド プロシージャがあります。パラメータがヌルの可能性があります。また、12 個のドロップダウン リストがあります。ドロップ ダウンリストの値は、sp に渡されます。dropdownlist.selecteditem.value = null の場合、ドロップダウン リストからプロシージャに null 値を渡したいと思います。以下の割り当てを試しました:

int typeid = (Convert.ToInt16(ddlType.SelectedValue.ToString())) == null ? DBNull.Value : (int)(Convert.ToInt16(ddlType.SelectedValue.ToString()));

しかし、私はエラーが発生しました:

'System.DBNull' と 'int' の間に暗黙的な変換がないため、条件式の型を特定できません

どうぞよろしくお願いいたします。

4

5 に答える 5

4

問題は、DBNull.Valueに割り当てることができないことintです。あなたが持っている1つのオプションは、次のようなことをすることです:

int typeid = string.IsNullOrEmpty(ddlType.SelectedValue) ?
    default(int) :
    Convert.ToInt32(ddlType.SelectedValue);

別のオプションは、使用することint?です:

int? typeid = string.IsNullOrEmpty(ddlType.SelectedValue) ?
    (int?)null :
    (int?)Convert.ToInt32(ddlType.SelectedValue);

他にもたくさんのオプションがあります。しかし、値を に取得しようとしていて、int何かが選択されているかどうかを後で知りたい場合は、これら 2 つのオプションは非常に簡単です。最初のケースでは、後で比較して以前default(int)かどうかを確認することで、それを推測できます。2 番目のケースでは、そうであるかどうかを確認するnullために言うことができるので、さらに簡単です。typeid.HasValuenull

ToString()が の場合SelectedValueは失敗するため、呼び出しを取りましたnull。ただし、これが Web フォーム アプリケーションではなく Windows フォーム アプリケーションである場合 (これは私が推測したことです)、その値を次のような文字列に変換する必要があります。

var val = Convert.ToString(ddlType.SelectedValue);
int? typeid = string.IsNullOrEmpty(val) ?
    (int?)null :
    (int?)Convert.ToInt32(ddlType.SelectedValue);

Convert.ToString値が の場合、 は空の文字列を返すためですnull

于 2013-09-19T15:16:05.340 に答える
1

変数を次のように宣言しますint? typeID

これは、null とともに整数を受け入れます

ここで、上記の宣言は、それが nullable であることを示しています

それが役に立てば幸い

于 2013-09-19T15:15:08.833 に答える
0

DropdownList の SelectedValue プロパティは文字列を返すため、ToString 変換を行う必要はありません。

int は null 許容型ではないため、null 値を int に変換することはできません。また、int は int16 ではなく int32 です。

int? typeId = ddlType.SelectedValue != null : Convert.ToInt32(ddlType.SelectedValue) ? null;
于 2013-09-19T15:19:06.800 に答える
0

そもそも nullable int を使用しないのはなぜですか?

int? typeid = string.IsNullOrEmpty(ddlType.SelectedValue)? null: Convert.ToInt16(ddlType.SelectedValue);

ドロップダウンに値がない場合、typeid は null になります。もしそうなら、それはそれを保持します。

于 2013-09-19T15:17:15.577 に答える