我在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语句。
有没有直截了当的方法呢?
答案 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);