【发布时间】:2012-10-04 14:52:08
【问题描述】:
我有一个函数可以执行查询并返回一个标量值,如下所示:
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',等等)。
如果您找到更好的解决方案,请告诉我。
提前感谢您的帮助。
【问题讨论】:
标签: c# c#-4.0 .net-4.0 ado.net