2016-06-07 37 views
0

我在Oracle中有一个名为“EmployeeNumber”的Oracle中有一个可为空的int字段的表。当我尝试使用xsd数据集将此值分配给SQL Server中的匹配字段时,我收到无法将null转换为int的情况。C#使用数据集将oracle nullable int移动到sql server nullable int

sqlEmployeeDT.AddEmployeeRow(dr.CM_REALM, 
dr.CM_CO, dr.EM_FILE_NO, dr.EM_LOCATION, dr.EM_EMPNO)                    

不出现在该点是发生我尝试分配的值(addemployeerow)这是发生在我尝试阅读的价值,在一个强类型INT列中,从甲骨文(dr.EM_EMPNO)因为Oracle将字段值返回为空,但C#要求使用int。

我找了一个答案,但找不到任何东西。大多数答案都在谈论null与DBNull.Value。但是这个问题似乎在Oracle和C#之间。

我可以在使用dr.IsEm_EMPNONull()插入之前检查Oracle值,但是接下来我需要使用sqlEmployeeDT.AddEmployeeRow将空插入到SQL Server int字段中,从而生成“不能将null转换为int”在插入语句上。

这样做没有直接的方法吗?

回答

1

在这里可能会出现任何数量的错误。您的示例没有显示足够的信息来清楚发生了什么问题。最可能的解释是AddEmployeeRow方法将第五个参数定义为int类型,它需要一个整数,而不是一个空值,而不是一个DBNull.Value。

您可能想要检查sqlEmployeeDT.Columns [“EM_EMPNO”]。AllowDBNull以确保这是真实的。

另一种方法可能是使用

DataRow row = sqlEmployeeDT.NewRow(); 
row["CM_REALM"] = dr.CM_REALM; //etc. 
row["EM_EMPNO"] = DBNull.Value; 
sqlEmployeeDT.Rows.Add(row); 
+0

我几乎准备拉这一做法插头。伯特的另一种方法就像一种魅力。我看到我的问题以一百多种不同的方式发布,并且看到它的答案也同样多。这个答案是我需要的。 – EllieK