null値を挿入したいSQLタイプsmallint(EFタイプInt16)の列がありますが、以下のコードを使用すると、nullをshortに変換できないというエラーが発生します。nullを挿入できるようにするステートメントの場合、この1行を取得するにはどうすればよいですか?
CollectionID = (ddlCollection.SelectedValue == "None") ? null : Convert.ToInt16(ddlCollection.SelectedValue)
null値を挿入したいSQLタイプsmallint(EFタイプInt16)の列がありますが、以下のコードを使用すると、nullをshortに変換できないというエラーが発生します。nullを挿入できるようにするステートメントの場合、この1行を取得するにはどうすればよいですか?
CollectionID = (ddlCollection.SelectedValue == "None") ? null : Convert.ToInt16(ddlCollection.SelectedValue)
動作するコードは、次のようなnullablecnvertを実行することです。
CollectionID = (ddlCollection.SelectedValue == "None") ? (Nullable<Int16>)null : Convert.ToInt16(ddlCollection.SelectedValue)
c#のデータベースにはnullの値があります:DBNull.Value
最初の問題は、Entity FrameworkプロパティをNullableとしてマークするかCollectionID
(EDMXを使用している場合)、CodeFirstとして宣言する必要があることです。short?
Nullable<short>
次に、その列のデータベースタイプもnull許容としてマークされていることを確認する必要があります(smallint NULL
SQL Serverのようなもの)。
編集:ああ、私は今問題を見ていると思います。に電話をかけてみてConvert.ToInt16
くださいNullable<short>
。三項演算子は側面にaを表示null
し、側面の値true
と互換性のないタイプを入力しているため、エラーが発生しています。null
false
CollectionID = (ddlCollection.SelectedValue == "None")
? (Nullable<short>)null
: (Nullable<short>)Convert.ToInt16(ddlCollection.SelectedValue)
sqlcommandパラメーターで使用します
if(ddl_collection.selectedvalue!="None")
command.Parameters.AddWithValue("@CollectionID", Convert.ToInt16(ddlcollection.selectedValue));
else
command.Parameters.AddWithValue("@CollectionID", DBNull.Value);