我有一个执行查询并返回这样的标量值的函数:
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、十进制 - 0.00,对于字符串 - 一个空值,对于 datetime - '1900-01-01' 等)。
如果您找到更好的解决方案,请告诉我。
在此先感谢您的帮助。