【发布时间】:2014-04-25 20:38:33
【问题描述】:
我收到这个错误
对象引用未设置为对象实例
尝试向 SQL Server 数据库发送空值时。该列接受NULL 值。这是我表的代码
[id] [int] IDENTITY(1,1) NOT NULL,
[numeroreporte] [varchar](100) NULL,
[dias] [nvarchar](10) NULL,
[lugar] [nvarchar](max) NULL,
[workorder] [int] NULL,
[InOutHour] [nvarchar](30) NULL,
[overtime] [int] NULL,
[emergencia] [nvarchar](50) NULL,
[viaje] [nvarchar](50) NULL,
[almuerzo] [decimal](12, 2) NULL,
[peaje] [decimal](12, 2) NULL,
[otros] [decimal](12, 2) NULL,
这是我在 c# 中的代码:
public void datosReporte ( DataGridView dgv, Label linkLB )
{
sqlCOMM = new SqlCommand("InsertarDatosReporte", sqlCON);
sqlCOMM.CommandType = System.Data.CommandType.StoredProcedure;
sqlCOMM.Parameters.Add("@numeroreporte", System.Data.SqlDbType.NVarChar);
sqlCOMM.Parameters.Add("@sp_dias", System.Data.SqlDbType.NVarChar) ;
sqlCOMM.Parameters.Add("@sp_lugar", System.Data.SqlDbType.NVarChar) ;
sqlCOMM.Parameters.Add("@sp_workorder", System.Data.SqlDbType.VarChar) ;
sqlCOMM.Parameters.Add("@sp_InOutHour", System.Data.SqlDbType.NVarChar) ;
sqlCOMM.Parameters.Add("@sp_overtime", System.Data.SqlDbType.Int).ToString() ;
sqlCOMM.Parameters.Add("@sp_emergencia", System.Data.SqlDbType.NVarChar) ;
sqlCOMM.Parameters.Add("@sp_viaje", System.Data.SqlDbType.NVarChar) ;
sqlCOMM.Parameters.Add("@sp_almuerzo", System.Data.SqlDbType.Decimal) ;
sqlCOMM.Parameters.Add("@sp_peaje", System.Data.SqlDbType.Decimal) ;
sqlCOMM.Parameters.Add("@sp_otros", System.Data.SqlDbType.Decimal);
try
{
sqlCON.Open();
foreach (DataGridViewRow row in dgv.Rows)
{
if (!row.IsNewRow)
{
sqlCOMM.Parameters["@numeroreporte"].Value =linkLB.Text;
sqlCOMM.Parameters["@sp_dias"].Value = row.Cells[0].Value.ToString();
sqlCOMM.Parameters["@sp_lugar"].Value = row.Cells[1].Value.ToString();
sqlCOMM.Parameters["@sp_workorder"].Value = row.Cells[2].Value;
sqlCOMM.Parameters["@sp_InOutHour"].Value = row.Cells[3].Value.ToString();
sqlCOMM.Parameters["@sp_overtime"].Value = row.Cells[4].Value;
sqlCOMM.Parameters["@sp_emergencia"].Value = row.Cells[5].Value.ToString();
sqlCOMM.Parameters["@sp_viaje"].Value = row.Cells[6].Value.ToString();
sqlCOMM.Parameters["@sp_almuerzo"].Value = row.Cells[7].Value;
sqlCOMM.Parameters["@sp_peaje"].Value = row.Cells[8].Value;
sqlCOMM.Parameters["@sp_otros"].Value = row.Cells[9].Value;
sqlCOMM.ExecuteNonQuery();
}
}
}
catch (SqlException ex)
{
MessageBox.Show(ex.Message);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
sqlCON.Close();
}
}
【问题讨论】:
-
哪个参数有空值/哪一行导致了问题?空的意思是
null? -
你如何尝试发送空值?哪个参数为空?
-
SQL 不支持
where val = NULL它支持where val IS NULL,所以你不能只抛出null作为值。 -
yuriry,datagridview 中的空单元格
-
Hamlet Hakobyan,所有参数都为空,但是当我看到该错误时,我输入了默认值。但是,如果用户删除该值并发送该空值,则会出现此问题。
标签: c# sql-server sql-server-2012