为什么此代码抛出“对象引用未设置为对象的实例”异常

时间:2013-12-21 03:48:19

标签: c#

我正在尝试使用datagridview更新我的数据库,但它抛出“对象引用没有设置为对象的实例”,下面的例外是我的代码:

foreach (DataGridViewRow dgRow in dataGridView1.Rows)
{
   //string re = dgRow.Cells[0].Value.ToString();
   string re =Convert.ToString(dgRow.Cells[0].Value.ToString());
   string strQuery = "UPDATE unit_master SET unit='"+re.ToString()+"'";
   SqlCommand scmd = new SqlCommand(strQuery,SqlConn);
   scmd.ExecuteNonQuery();
}
SqlConn.Close();

2 个答案:

答案 0 :(得分:2)

您需要在调试模式下运行代码(在Visual Studio中使用F5,或单击Debug-> Start Debug)并跟踪它。调试器应该实际停止并向您显示什么是null,这样您就可以找出它为空的原因。您还可以在循环开始时设置断点,并逐步执行代码的每一行,以便查看发生的情况。您可以在每个变量上设置监视,以便您可以在每个步骤中查看值。

很可能dgRow为null,或者它没有正确转换为字符串,或者列的值为null。

作为旁注,您将dgRow.Cells [0] .Value转换为字符串两次... Value.ToString已经在进行转换,因此无需再次调用Convert.ToString()。

答案 1 :(得分:1)

问题1:请检查您是否已正确初始化SqlConnection实例变量。

问题2: GridView单元格可能有null。如果您在null上调用任何函数,则会抛出NullReferenceException

建议:使用参数化查询来避免SQL注入攻击。

试试这个:

SqlConn = new SqlConnection("/*your connection string*/");
foreach (DataGridViewRow dgRow in dataGridView1.Rows)
{
    if(dgRow.Cells[0].Value!=null)
    {
       string re =dgRow.Cells[0].Value.ToString();
       string strQuery = "UPDATE unit_master SET unit=@unit";
       SqlCommand scmd = new SqlCommand(strQuery,SqlConn);
       scmd.Parameters.AddWithValue("@unit",unit);
       scmd.ExecuteNonQuery();
    }
}
SqlConn.Close();