我收到此错误
对象引用未设置为对象的实例
尝试将空值发送到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();
}
}
答案 0 :(得分:1)
您收到的错误消息告诉我,您使用Value.ToString()
的其中一个单元格实际上包含null
。您无法在不存在的对象上调用ToString
。
一种解决方案是首先检查单元格Value
,如果它null
,则将DBNull.Value
分配给参数的Value
。一个更好的选择是简单地将网格绑定到DataTable
,然后默认情况下空单元格将包含DBNull.Value
。您只需使用数据适配器将DataTable
中的所有更改一次性保存回数据库,因此不会出现循环。