sql - 如果值为空,如何将值返回到 sqldatareader?

标签 sql sql-server vb.net sql-server-2008

我目前正在使用 SQL 数据读取器(在 vb.net 中)通过存储过程从 SQL Server 2008 数据库中提取文章对象。该对象的一部分包括如下所示的两个属性:

theArticle.Truthfulness = ((myReader.GetInt32(myReader.GetOrdinal("Truthfulness"))))
theArticle.Relevance = ((myReader.GetInt32(myReader.GetOrdinal("Relevance"))))

我的问题是真实性和相关性可能会返回空值,这会导致函数失败。

我想我明白为什么。我要求提供一个整数值 (getin32),因为返回 null,所以失败。

如何容纳数据库中的空值以免其掉落?

最佳答案

您可以使用 .IsDBNull() 检查给定序数位置是否为空,然后执行某些操作 - 例如将您的值设置为 -1 或其他值:

int myOrdinal = myReader.GetOrdinal("Truthfullness");

if(myReader.IsDBNull(myOrdinal))
{
  theArticle.Truthfulness = -1;
}
else
{
  theArticle.Truthfulness = myReader.GetInt32(myOrdinal);
}

正如 Mike Hofer 在他的回答中指出的那样,您还可以将所有这些逻辑包装到扩展方法中:

public static class SqlDataReaderExtensions 
{
    public static int SafeGetInt32(this SqlDataReader reader, 
                                   string columnName, int defaultValue) 
    {
        int ordinal = reader.GetOrdinal(columnName);

        if(!reader.IsDbNull(ordinal))
        {
           return reader.GetInt32(ordinal);
        } 
        else
        {
           return defaultValue;
        }
    }
}

然后只需使用“SafeGetInt32”方法即可:

  theArticle.Truthfulness = myReader.SafeGetInt32("Truthfullness", -1);

马克

关于sql - 如果值为空,如何将值返回到 sqldatareader?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1513438/

相关文章:

sql - 在 PostgreSQL 中混淆相同长度的名称

sql-server - 如何限制SQL Server Developer版本为Standard版本?

sql - 在这个demo中,我应该在每一列上创建一个索引还是只创建一个非聚集索引(Index Scan、Seek)

sql-server - 进行 UNION 时针对未知进行优化

C# > VB 转换,RelayCommand 的行为不同

regex - VB.Net 验证 : Checking if Text Contains Only Letters

sql - 具有多列和 Desc/Asc 排序的 Order By 子句的 CASE 语句

mysql - 用于选择字段名称的 while 循环?

php - 从phpmyadmin导入sql数据库时出错

vb.net - 双击列表框中的项目时如何运行子程序