【问题标题】:Getting a "Value for <column> in table <table> is DBNull" error在表 <table> 中获取“<column> 的值是 DBNull”错误
【发布时间】:2012-04-18 12:53:53
【问题描述】:

我正在开发 WCF 服务,在该服务中,我试图将传递给方法的一个数据表中的数据加载到本地数据库中的另一个数据表中(在这种情况下,“本地”数据库是Windows 2003 Server 上的 SQL Server 数据库)。当我这样做时,我收到以下错误消息:

“表 'ASIVocationalNeeds' 中列 'VocNeedDesc' 的值为 DBNull。”

这实际上没问题,因为表 ASILocationalNeeds 中的列 VocNeedDesc 允许空值。最初我只是将 VocNeedDesc 的值从传递的表分配给本地表,但我得到了那个错误。所以接下来我更改了我的代码来检查 VocNeedDesc 的值是否为空,如果是,我将 string.Empty 分配给该值,否则我分配了传递的值,但我仍然收到错误消息。我很难过;不知道为什么我会收到此错误。这是相关的代码段:

localEmploy.ASIVocationalNeeds.Rows.Add(clientNumber,
    caseNumber,
    0,
    EmploymentDataSet.ASIVocationalNeeds[i].VocNeedType,
    (EmploymentDataSet.ASIVocationalNeeds[i].VocNeedDesc == null ? string.Empty : EmploymentDataSet.ASIVocationalNeeds[i].VocNeedDesc));

【问题讨论】:

    标签: .net wcf visual-studio-2008


    【解决方案1】:

    DBNull 检查不适用于整列的单元格值

    所以试试这个

    EmploymentDataSet.ASIVocationalNeeds.Rows[i]["VocNeedDesc"] == DBNull.Value ? string.Empty : EmploymentDataSet.ASIVocationalNeeds[i].VocNeedDesc));
    

    如果您使用的是 typeDatset 您可以将空值检查为

    ((ASIVocationalNeedsRow)EmploymentDataSet.ASIVocationalNeeds.Rows[i]).isVocNeedDescnull() ? string.Empty : EmploymentDataSet.ASIVocationalNeeds[i].VocNeedDesc));
    

    【讨论】:

    • 我使用的是类型化数据集,所以我想试试你的建议。我现在在就业数据集.ASIVocationalNeeds 数据表上使用 IsVocNeedDescNull() 方法。在测试中它有效!但是,当我编译它并将其放在服务器上时,我仍然得到“......表 'ASILocationalNeeds' 中列 'VocNeedDesc' 的值是 DBBull。”错误信息。为什么在 Windows 2003 R2 服务器上作为 WCF 服务运行会有所不同?
    • 没关系。我发现在不同的条件下我做了同样的任务,从 EmploymentDataSet.ASILocationalNeeds[i].VocNeedDesc 中提取,因为我不应该这样做。我发布的代码仅高出 15 行。啊!我怎么会错过呢?
    【解决方案2】:

    您是否尝试将其与DBNull.Value 进行比较?

    代码可能看起来像

    EmploymentDataSet.ASIVocationalNeeds[i].VocNeedDesc == DBNull.Value ? string.Empty : EmploymentDataSet.ASIVocationalNeeds[i].VocNeedDesc));
    

    【讨论】:

    • 不,我没有。我刚试了一下,我收到一条警告,上面写着“运算符'=='不能应用于'string'和'System.DBNull'类型的操作数”。不过,它确实给了我一个想法,我会尝试使用 string.IsNullOrEmpty() 方法。
    • 很遗憾,使用 string.IsNullOrEmpty() 方法调用不起作用。
    猜你喜欢
    • 2016-12-28
    • 2014-04-27
    • 2014-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多