Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何通过C向SQL表中插入可为null的整型列的null值#_C#_Sql_Asp.net_Sql Server_Asp.net 4.5 - Fatal编程技术网

C# 如何通过C向SQL表中插入可为null的整型列的null值#

C# 如何通过C向SQL表中插入可为null的整型列的null值#,c#,sql,asp.net,sql-server,asp.net-4.5,C#,Sql,Asp.net,Sql Server,Asp.net 4.5,我正在通过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

我正在通过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\u数据存储过程是(Sql Server 2014):

CREATE PROCEDURE spInsert_Data
   @Q3 int
AS BEGIN
   insert into tblMyData (Q3) values (@Q3);
END
除非Q3为null,否则此代码运行良好。当Q3为空时,这意味着CSV中没有Q3行的数据,它给出了错误:

过程或函数“spInsert_Data”需要参数“@Q3”,该参数 没有供应

下面是错误的图片。什么地方出了问题,我该如何解决?任何帮助都将不胜感激


只需将其设置为默认值null即可。但是当该值为null时,您将希望而不是插入(至少这是我所期望的)。。。因此,如果,请添加一个

CREATE PROCEDURE spInsert_Data (@Q3 int = null)
AS BEGIN
IF (@Q3 is not null)
BEGIN
   insert into tblMyData (Q3) values (@Q3);
END
END

您可以使用
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
可用于在数据库中设置空值。从:

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


原始行中还有其他列,因此即使Q3为null,我也应该添加该行。我将尝试您的解决方案您的解决方案有效,只是我不想更新SP,因为它也被其他页面使用。非常感谢分享,谢谢。不用担心@eraybalkanlipable if(drpselected.SelectedValue==“”){values.add(DBNull.Value);}else{values.add(drpselected.SelectedValue);}