恢复double's空
我有一个表与几个领域,其中之一是可以包含空值Double类型字段......恢复double's空
使用ADO和SqlDataReader的我恢复的变量场。我将这个变量定义为:Double,Double?,double,double? ...我用GetValue(并做了一个演员)或使用GetDouble ...得到了值(来自SQLDataReader)...当值为空时,每一个都会崩溃。
唯一的这是工作是定义这个变量作为一个对象,但我不想要它。在超前的思维可能是艰难的时刻在我的项目处理这种类型的...
报价:我当这个值为0或空的区分的情况下...
任何想法的家伙?
编辑:
Object.DoubleValue= (Double?)Datos.GetDouble(1);
Object.doubleValue= (double?)Datos.GetDouble(1);
不工作。
Object.ObjectValue= Datos.GetValue(1);
工作。
不幸的是,没有开箱即用的方法。但是你可以用这样的扩展方法调整它:
(注意它只是一个粗略的原型,在你的情况下工作,但可能需要一些检查和约束等)
public static class Helpers
{
public static T GetSmartValue<T>(this SqlDataReader r, int ordinal)
{
dynamic value = r.GetValue(ordinal);
if (value == DBNull.Value)
{
value = null;
return value;
}
return (T) value;
}
}
然后在你的代码
var x = yourReader.GetSmartValue<double?>(1);
最后我停下来......我会用你的方法gsharp。相当优雅...感谢搭档... –
欢迎。但是我不知道你正在写什么样的应用程序,但我使用普通的ado.net大多只用于快速的肮脏的东西,对于其他我依赖于精巧或EF。使生活更容易:) – gsharp
很难解释...但我需要使用它...再次感谢gsharp ... :) –
你能分享一下你的代码吗? –
在使用'GetDouble'之前调用'IsDbNull' * *或使用像Dapper这样的微ORM来抽象所有这些。你应该使用'numeric'和'GetDecimal'而不是两倍 –
你的数据库中的数据类型是什么? SQL服务器? – gsharp