C# 使用数据集将 oracle 可空 int 移动到 sql 服务器可空 int

C# move oracle nullable int to sql server nullable int using dataset

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

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

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

我一直在寻找答案,但一无所获。大多数答案都在谈论 null 与 DBNull.Value。但是这个问题好像是Oracle和C#之间的问题。

我可以在使用 dr.IsEm_EMPNONull() 插入之前检查 Oracle 值,但随后我面临使用 sqlEmployeeDT.AddEmployeeRow 将空值插入 SQL 服务器 int 字段,这会产生一个"can't convert null to int" 在插入语句上。

没有直接的方法吗?

这里可能会出现很多问题。您的示例没有显示足够的信息来弄清楚出了什么问题。最可能的解释是 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);