【发布时间】:2012-09-04 11:28:00
【问题描述】:
我有以下功能:
public T GetScalar<T>(string sql, T defaultValue, SQLParam[] sqlParams = null)
{
DataTable dt = GetDataTable(sql, sqlParams);
if (dt.Rows.Count == 0) return defaultValue;
else
{
try
{
object tmp = dt.Rows[0][0];
return (T)tmp;
}
catch { return defaultValue; }
}
}
我收到了InvalidCastException。
在调试过程中,我可以看到tmp 的值为3,而T 的类型为int。
这里有什么问题?
编辑
一点背景知识:这曾经在 MySQL 中工作。我现在已经转移到 SQLServer(谢天谢地几乎没有努力),但现在这段代码失败了。
【问题讨论】:
-
为什么首先要声明对象?为什么不只是
T tmp? -
如果你只想要一个标量,你为什么要首先加载到
DataTable? (这纯粹是出于好奇) -
@Joel - 我只是将 tmp 放在那里进行调试,最初是
return (T)dt.Rows[0][0] -
也许您还想使用
Field方法访问数据行。 -
这很奇怪——这曾经在 MySQL 中工作(使用完全相同的代码)——但现在由于其他原因我需要迁移到 SQLServer。这段代码现在中断了。