我正在通过OleDBConnection读取CSV文件,在那里检索某些字段的整数值并将其保存到SQL DB。我有一列名为Q3的列可以为空。

当我尝试以下操作时,效果很好:

create table #temp (num int);
insert into #temp (num) values (null);


但是,我在asp.net 4.5中有以下代码无法正常工作:

SQLDatabase sql = new SQLDatabase();
SQLParamList sqlParams = new SQLParamList();

int? Q3 = null;
Q3 = CheckNumericContent(r, dr, "Q3"); //Q3 empty cell for the row in csv.
sqlParams.Add("@Q3", Q3); //Q3 is still null here.
sql.ExecStoredProcedureDataTable("[spInsert_Data]", sqlParams);


CheckNumericContent函数的代码在这里:

private int? CheckNumericContent(int r, DataRow dr, string columnname)
{
    int ret = -1;
    if (dr[columnname] != null && !String.IsNullOrEmpty(dr[columnname].ToString()))
    {
        try
         {
             if (!Int32.TryParse(dr[columnname].ToString(), out ret))
             {
                 ErrorMessage = ErrorMessage + string.Format("Row {0}: {1) is not numeric.\n", r.ToString(), columnname);
             }
         }
         catch (Exception ex)
         {
            ErrorMessage = ErrorMessage + "some error: "+ex.ToString();
         }
          return ret;
    }
    else
    {
        return null;
    }
}


spInsert_Data存储过程为(Sql Server 2014):

CREATE PROCEDURE spInsert_Data
   @Q3 int
AS BEGIN
   insert into tblMyData (Q3) values (@Q3);
END


除非Q3为空,否则此代码运行良好。当Q3为空时,这意味着CSV中的一行没有Q3的数据,它给出了错误:


  过程或函数“ spInsert_Data”需要参数“ @ Q3”,该参数
  未提供。


错误图片在下面。有什么问题,我该如何解决?任何帮助,将不胜感激!

c# - 如何通过C#将可空整数列的空值插入SQL表-LMLPHP

最佳答案

您可以使用DBNull.Value

int? Q3 = null;
Q3 = CheckNumericContent(r, dr, "Q3"); //Q3 empty cell for the row in csv.
if (Q3.HasValue)
{
    sqlParams.Add("@Q3", Q3);
}
else
{
    sqlParams.Add("@Q3", DBNull.Value)
}
sql.ExecStoredProcedureDataTable("[spInsert_Data]", sqlParams);


DBNull.Value可用于在数据库中设置空值。从docs


  如果数据库字段中缺少数据,则可以使用DBNull.Value
  属性,以将DBNull对象值显式分配给该字段。

关于c# - 如何通过C#将可空整数列的空值插入SQL表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54244925/

10-12 15:37