我试图更新数据网格中的多行,代码完成了工作,但我似乎还是得到了
对象引用未设置为对象的实例
当我检查记录时,所需状态会相应地更新gridview中的所选记录。
private void UpdateWorkerStatus()
{
SqlCommand cmdUpdate = new SqlCommand(@"UPDATE Workers2
SET WorkerStatus = @WorkerStatus
WHERE FullName = @FullName", cn);
cmdUpdate.Parameters.AddWithValue("@WorkerStatus", SqlDbType.VarChar).Value = txtWorkerStatus.Text;
cmdUpdate.Parameters.AddWithValue("@FullName", SqlDbType.VarChar).Value = txtFullName.Text;
foreach (DataGridViewRow row in grdWorkers.Rows)
{
cmdUpdate.Parameters["@WorkerStatus"].Value = row.Cells["WorkerStatus"].Value.ToString();
cmdUpdate.Parameters["@FullName"].Value = row.Cells["FullName"].Value.ToString();
cmdUpdate.ExecuteNonQuery();
}
}
提前谢谢! :)
答案 0 :(得分:1)
private void UpdateWorkerStatus()
{
SqlCommand cmdUpdate = new SqlCommand(@"UPDATE Workers2
SET WorkerStatus = @WorkerStatus
WHERE FullName = @FullName", cn);
cmdUpdate.Parameters.AddWithValue("@WorkerStatus", SqlDbType.VarChar).Value = txtWorkerStatus.Text;
cmdUpdate.Parameters.AddWithValue("@FullName", SqlDbType.VarChar).Value = txtFullName.Text;
foreach (DataGridViewRow row in grdWorkers.Rows)
{
cmdUpdate.Parameters["@WorkerStatus"].Value = row.Cells["WorkerStatus"].Value!=DBNull.Value? row.Cells["WorkerStatus"].Value.ToString():"";
cmdUpdate.Parameters["@FullName"].Value = row.Cells["FullName"].Value!= DBNull.Value ? row.Cells["FullName"].Value.ToString():"";
cmdUpdate.ExecuteNonQuery();
}
}
答案 1 :(得分:0)
试试这个,而不是.ToString()
使用Convert.Tostring( row.Cells["FullName"].Value)
同样适用于" WorkStatus"
答案 2 :(得分:0)
由于您没有向我们提供抛出异常的位置的信息,因此我将假设它位于其中一个.ToString()调用上,因为它们最有可能。可能WorkerStatus或FullName的值之一为null,因此在调用.ToString()方法时会导致异常。
我会在调用.ToString()之前检查null的值。如果您尝试读取的值为null,则可以使用有意义的值填充参数值:
if (row.Cells["WorkerStatus"].Value != null)
cmdUpdate.Parameters["@WorkerStatus"].Value = row.Cells["WorkerStatus"].Value.ToString();
else
cmdUpdate.Parameters["@WorkerStatus"].Value = string.Empty // or some meaningful default value of your chosing
您可以使用以下方法将此语句缩减为一行:
cmdUpdate.Parameters["@WorkerStatus"].Value = (row.Cells["WorkerStatus"].Value != null) ? row.Cells["WorkerStatus"].Value.ToString() : string.Empty;
当然,你应该为FullName做同样的事情。