C#使用数据集

时间:2016-06-07 17:24:12

标签: c# oracle dataset strongly-typed-dataset

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

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

当我尝试在Oracle(dr.EM_EMPNO)的强类型int列中读取值时,尝试分配值(addemployeerow)时,似乎没有发生这种情况,因为Oracle正在返回字段值为null,但C#要求int。

我找了答案,却找不到任何答案。大多数答案都是关于null vs DBNull.Value。但是这个问题似乎是在Oracle和C#之间。

我可以在使用dr.IsEm_EMPNONull()插入之前检查Oracle值,但后来我面临使用sqlEmployeeDT.AddEmployeeRow将null插入到SQL Server int字段中,这会生成“无法将null转换为int” insert语句。

有没有直截了当的方法呢?

1 个答案:

答案 0 :(得分:1)

这里可能出现任何问题。你的例子并没有显示足够的信息来弄清楚出了什么问题。最可能的解释是AddEmployeeRow方法将第五个参数定义为int类型,它需要一个整数,而不是null,而不是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);