我正在尝试使用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();
答案 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();