我正在通过OleDBConnection读取一个CSV文件,检索一些字段的整数值,并保存到SQL。我有一个名为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存储过程是( Server 2014):
CREATE PROCEDURE spInsert_Data
@Q3 int
AS BEGIN
insert into tblMyData (Q3) values (@Q3);
END除非Q3为null,否则此代码运行良好。当Q3为null (这意味着CSV中的一行没有Q3的数据)时,它将给出错误:
过程或函数'spInsert_Data‘期望参数'@Q3',这是没有提供的。
错误的图片显示在下面。有什么问题,我该怎么解决呢?任何帮助都将不胜感激!

发布于 2019-01-17 22:11:22
你可以用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对象值。
发布于 2019-01-17 22:05:38
只需将其设置为空作为默认值。但是当值为null时,您需要而不是插入(至少这是我所期望的).所以添加一个IF。
CREATE PROCEDURE spInsert_Data (@Q3 int = null)
AS BEGIN
IF (@Q3 is not null)
BEGIN
insert into tblMyData (Q3) values (@Q3);
END
ENDhttps://stackoverflow.com/questions/54244925
复制相似问题