我正在开发一项 WCF 服务,在该服务中,我尝试将传递给该方法的一个数据表中的数据加载到本地数据库中的另一个数据表中(在本例中,“本地”数据库是 SQL Server) Windows 2003 Server 上的数据库)。 当我这样做时,我收到以下错误消息:
“表‘ASIVocationalNeeds’中列‘VocNeedDesc’的值为 DBNull。”
这实际上是可以的,因为表 ASIVocationalNeeds 中的 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));
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));
您是否尝试过将其与 DBNull.Value 进行比较?
代码可能看起来像
EmploymentDataSet.ASIVocationalNeeds[i].VocNeedDesc == DBNull.Value ? string.Empty : EmploymentDataSet.ASIVocationalNeeds[i].VocNeedDesc));
这对我有用
var FilteredData = 来自 dataTable.AsEnumerable() 中的行 让supplierId = row.IsNull("Supplier_Id") ? (int?)null : row.Field("Supplier_Id") 其中(供应商 ID <= 0 || supplierId == 3) && row.Field("Status") == "Active" select row;
// 现在对过滤后的数据进行分组 var groupedData = 过滤数据 .GroupBy(行 => SIMMonthsToChargeOnMonth(行, StartOfBillingDay, 日期, BillingMethod));