首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何通过C#将可空整数列的空值插入到nullable

如何通过C#将可空整数列的空值插入到nullable
EN

Stack Overflow用户
提问于 2019-01-17 22:02:50
回答 2查看 11.7K关注 0票数 4

我正在通过OleDBConnection读取一个CSV文件,检索一些字段的整数值,并保存到SQL。我有一个名为Q3的列,它是可空

当我尝试以下方法时,效果很好:

代码语言:javascript
复制
create table #temp (num int);
insert into #temp (num) values (null);

但是,我在asp.net 4.5中有以下代码,它不起作用:

代码语言:javascript
复制
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函数的代码如下:

代码语言:javascript
复制
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存储过程是( Server 2014):

代码语言:javascript
复制
CREATE PROCEDURE spInsert_Data
   @Q3 int
AS BEGIN
   insert into tblMyData (Q3) values (@Q3);
END

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

过程或函数'spInsert_Data‘期望参数'@Q3',这是没有提供的。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-01-17 22:11:22

你可以用DBNull.Value

代码语言:javascript
复制
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对象值。

票数 7
EN

Stack Overflow用户

发布于 2019-01-17 22:05:38

只需将其设置为空作为默认值。但是当值为null时,您需要而不是插入(至少这是我所期望的).所以添加一个IF

代码语言:javascript
复制
CREATE PROCEDURE spInsert_Data (@Q3 int = null)
AS BEGIN
IF (@Q3 is not null)
BEGIN
   insert into tblMyData (Q3) values (@Q3);
END
END
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54244925

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档