通常、string
を渡すことは問題ありません。 SQL Server が文字列の内容を数値自体に変換できる限り、数値のパラメーターに変換します。それが機能しない場合、このエラーが発生します。
例:"Hello"
を渡す 数値のパラメーターに変更すると、エラーが発生します。 "1234"
を渡す あなたはそうしない。空の文字列または空白を含む文字列は数値に変換できないことに注意してください!
しかし、そうするのはスタイルが良くないと言わざるを得ません。問題を回避するために、アプリケーションで使用する型がデータベースの型と一致していることを確認する必要があります。 string
が必要な理由について、さらに詳しく説明するかもしれません アプリケーションの型が役立つ場合があります。
編集 1
パラメータをクエリのオプションにする方法は次のとおりです:
WHERE RAUMKLASSE_ID = ISNULL(@Raumklasse_ID, RAUMKLASSE_ID)
のようなオプション パラメータを許可します。 .@Raumklasse_ID
を追加しないでください オプションにするか、値 DBNull.Value
を追加する必要がある場合はパラメーター
string
を変更することを本当に検討する必要があります int?
のような null 許容型へのプロパティ .
編集 2
編集 1 で提案した変更を実装したコードは次のようになります。
using (SqlCommand cmd = new SqlCommand(@"SELECT r.BEZEICHNUNG AS BEZEICHNUNG, r.ID AS ID FROM RAUM r WHERE RAUMKLASSE_ID = ISNULL(@Raumklasse_ID, RAUMKLASSE_ID) OR STADT_ID = ISNULL(@Stadt_ID, STADT_ID) OR GEBAEUDE_ID = ISNULL(@Gebaeude_ID, GEBAEUDE_ID) OR REGION_ID = ISNULL(@Region_ID, REGION_ID)", con))
{
con.Open();
if (!String.IsNullOrWhitespace(RAUMKLASSE_ID))
cmd.Parameters.AddWithValue("@Raumklasse_ID", RAUMKLASSE_ID);
else
cmd.Parameters.AddWithValue("@Raumklasse_ID", DBNull.Value);
if (!String.IsNullOrWhitespace(STADT_ID))
cmd.Parameters.AddWithValue("@Stadt_ID", STADT_ID);
else
cmd.Parameters.AddWithValue("@Stadt_ID", DBNull.Value);
if (!String.IsNullOrWhitespace(GEBAEUDE_ID))
cmd.Parameters.AddWithValue("@Gebaeude_ID", GEBAEUDE_ID);
else
cmd.Parameters.AddWithValue("@Gebaeude_ID", DBNull.Value);
if (!String.IsNullOrWhitespace(REGION_ID))
cmd.Parameters.AddWithValue("@Region_ID", REGION_ID);
else
cmd.Parameters.AddWithValue("@Region_ID", DBNull.Value);
...
}