【发布时间】:2014-04-30 18:48:26
【问题描述】:
我正在尝试使用将字段转换为泛型类型的自定义方法将存储在 SQL Server 数据库中的 decimal(4,2) 字段转换为 C# double。 (方法是SqlDataReader类的扩展。)
当我运行代码时,我不断收到错误“指定的强制转换无效”。
方法如下:
public static T Get<T>(this SqlDataReader reader, string field)
{
try {
int index = reader.GetOrdinal(field);
if (reader.IsDBNull(index)) return default(T);
T item = (T)reader[index];
return item;
} catch (Exception e) {
Console.WriteLine(e);
return default(T);
}
}
在我调用方法的地方,我正在将值直接读入类构造函数中,例如:
// reader is a SqlDataReader instance with an open connection, and fields obtained via the 'Read()' method.
MyClass myObject = new MyClass(reader.Get<double>("My_Field"));
SqlDataReader 中有正确的数据。 index 变量设置为正确的字段序号,在调试时我可以运行 reader[1]; 行并获得正确的返回值,例如:0 或 6.1。
失败的数据库中的一些值是:0.00、1.00、6.1。
我想找出导致此问题的原因并在通用方法中修复它(到目前为止,它已适用于所有其他常见数据类型),因为它旨在简化 ADO 并使其更易于阅读,而不是常规的糟糕的“样板”ADO。
【问题讨论】:
-
你说的失败是什么意思?如果有例外,您应该提供例外情况。
-
对于
DataRow已经是具有相同想法的扩展方法DataRow.Field<Decimal>("MyFieldName") -
异常错误是:“指定的转换无效”。我没有在任何地方写“归档”...?
标签: c# sql sql-server sql-server-2008 ado.net