在.net4中使用带有dbnull值的datareader

在.net4中使用带有dbnull值的datareader,第1张

概述我听说框架4中有一个字段扩展方法允许一个接收来自datareader的空值,而不必经过第一次测试的过程,如果不是null那么……等等.这里有关于扩展方法的信息( MSDN) ),但我不知道如何在代码中使用它(相对较新的.net和以前从未使用过的扩展方法).如果有人能举一个例子,我将不胜感激. 这是我试图实现的,但是当在任一列中返回dbnull时它会返回错误. Reader.Read()Dim V 我听说框架4中有一个字段扩展方法允许一个接收来自datareader的空值,而不必经过第一次测试的过程,如果不是null那么……等等.这里有关于扩展方法的信息( MSDN) ),但我不知道如何在代码中使用它(相对较新的.net和以前从未使用过的扩展方法).如果有人能举一个例子,我将不胜感激.

这是我试图实现的,但是当在任一列中返回dbnull时它会返回错误.

Reader.Read()Dim Val As Nullable(Of Double) = Reader.GetDecimal(0)Dim Vol As Nullable(Of Long) = Reader.GetInt32(1)
解决方法 这些扩展方法涉及DaTarow – 即Datatable ……而不是IDataReader(etc).
你可以用条件来做你想要的事情 – 虽然在VB中使用IIf,或者在C#中:

double? val = reader.Isdbnull(index) ? (double?) null : reader.GetDouble(index);long? vol = reader.Isdbnull(index) ? (long?)null : reader.GetInt64(index);

您当然可以将它们作为实用程序方法包装起来,也许作为您自己的IDataReader上的自定义扩展方法:

public static class DataReaderExtensions{    public static int? ReadNullableInt32(this IDataReader reader,int index)    {        return reader.Isdbnull(index) ? (int?)null : reader.GetInt32(index);    }    public static long? ReadNullableInt64(this IDataReader reader,int index)    {        return reader.Isdbnull(index) ? (long?)null : reader.GetInt64(index);    }    public static double? ReadNullableDouble(this IDataReader reader,int index)    {        return reader.Isdbnull(index) ? (double?)null : reader.GetDouble(index);    }    public static string ReadNullableString(this IDataReader reader,int index)    {        return reader.Isdbnull(index) ? null : reader.GetString(index);    }    // etc}

(抱歉使用c#作为示例 – 但你可以阅读c#比写出准确的vb.net更好)

总结

以上是内存溢出为你收集整理的在.net4中使用带有dbnull值的datareader全部内容,希望文章能够帮你解决在.net4中使用带有dbnull值的datareader所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1209718.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存