クエリを実行し、次のようなスカラー値を返す関数があります。
public T GetScalarValue<T>(string sql)
{
T t;
try {
SqlConnection conn = new SqlConnection("MY_SQL_SERVER_CONNECTION_STRING");
conn.Open();
SqlCommand cmd = new SqlCommand(sql, conn);
t = (T)cmd.ExecuteScalar();
}
catch (Exception ex) {
throw ex;
}
finally{
if(conn.State == ConnectionState.Open)
conn.Close();
}
return t;
}
指定された SQL でこの関数を呼び出すと、結果が得られます。
int result = dal.GetScalarValue<int>("SELECT [schema_id] FROM SYS.SCHEMAS WHERE [name] = 'dbo'")
クエリは int 値を返すため、これは正常に機能しますが、何も返さないクエリに対して同じものを呼び出すと、関数は失敗します。
int result = dal.GetScalarValue<int>("SELECT [schema_id] FROM SYS.SCHEMAS WHERE [name] = 'Foooo'")
cmd.ExecuteScalar() は結果を返さないため、「オブジェクト参照がオブジェクトのインスタンスに設定されていません」という例外が発生します。しかし、私はこの関数が与えられたタイプのデフォルト値を返すことを望んでいます (例: int の場合は 0、decimal-0.00、string の場合は空の値、datetime の場合は '1900-01-01' など)。
これに対するより良い解決策を見つけたら、私に知らせてください。
助けてくれてありがとう。