edittted:
我已经调试了,我发现一旦我填满所有字段,自动生成一个新的空行,一旦它存储在dabase中,它跟随循环foreach,并自动检测空引用这个是一个图像,我希望你理解我img8.imageshack.us/i/error3xh.jpg
我需要你的帮助,我无法控制异常,这里是我的方法和错误说System.NullReferenceException:对象引用未设置为对象的实例“,我该如何修复它,控制exeption,没有这种类型的消息?,无论它的结构如何:错误是行** if(combo3 == null || combo4 == null)**
private void btnCronograma_Click(object sender, EventArgs e)
{
string connstring = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\Users\\amaury\\Documents\\TEC\\Septimo Semestre\\Administracion de proyectos de ingenieria de softwaere\\nuevo4\\nuevo\\Office\\Office\\Policias.accdb";
using (OleDbConnection conn = new OleDbConnection(connstring))
{
conn.Open();
string sql = "INSERT INTO IndicadorProyecto (idProyecto, idMes, meta, real) VALUES(@idProyecto , @idMes , @meta, @real)";
OleDbCommand cmd = new OleDbCommand(sql, conn);
foreach (DataGridViewRow row in dataGridView8.Rows)
{
DataGridViewComboBoxCell combo3 = row.Cells["idProyecto"] as DataGridViewComboBoxCell;
DataGridViewComboBoxCell combo4 = row.Cells["idMes"] as DataGridViewComboBoxCell;
if (combo3 == null || combo4 == null)
{
MessageBox.Show("No se pudo convertir");
continue;
}
int idProyecto = int.Parse(combo3.Value.ToString());
int idMes = int.Parse(combo4.Value.ToString());
int meta = int.Parse(row.Cells[3].Value.ToString());
int real = int.Parse(row.Cells[4].Value.ToString());
cmd.Parameters.Clear();
cmd.Parameters.AddWithValue("@idProyecto", idProyecto);
cmd.Parameters.AddWithValue("@idMes", idMes);
cmd.Parameters.AddWithValue("@meta", meta);
cmd.Parameters.AddWithValue("@real", real);
cmd.ExecuteNonQuery();
}
}
}
这是完整的错误
Consulte el final de este mensaje para obtenermásdetallessobrecómo invocar adepuduraciónInst-In-Time (JIT)en lugar de a este cuadro de diálogo。
************** Texto delaexcepción************** System.NullReferenceException: Referencia objeto no establecida como instancia de un objeto。恩 Office.Form1.btnCronograma_Click(对象 sender,EventArgs e)en C:\ Users \用户阿毛里\文档\ TEC \ Septimo Semestre \ Administracion de proyectos de ingenieria de softwaere \ nuevo4 \ NUEVO \办公室\办公室\ Form1.cs中:拉利内阿 726 en System.Windows.Forms.Control.OnClick(EventArgs的 e)en System.Windows.Forms.Button.OnClick(EventArgs的 e)en System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)en System.Windows.Forms.Control.WmMouseUp(消息&安培; m,MouseButtons按钮,Int32点击) 恩 System.Windows.Forms.Control.WndProc(消息&安培; m)en System.Windows.Forms.ButtonBase.WndProc(消息&安培; m)en System.Windows.Forms.Button.WndProc(消息&安培; m)en System.Windows.Forms.Control.ControlNativeWindow.OnMessage(消息&安培; m)en System.Windows.Forms.Control.ControlNativeWindow.WndProc(消息&安培; m)en System.Windows.Forms.NativeWindow.Callback(IntPtr的 hWnd,Int32 msg,IntPtr wparam,IntPtr LPARAM)
答案 0 :(得分:3)
我认为最可能的原因是row.Cells[3].Value
或row.Cells[4].Value
为空(因为您没有给它们一个值),而.ToString()
会抛出一个空异常。
将代码更改为:
int meta = int.Parse(row.Cells[3].Value == null ? "0" : row.Cells[3].Value.ToString());
int real = int.Parse(row.Cells[4].Value == null ? "0" : row.Cells[4].Value.ToString());
答案 1 :(得分:0)
这只是在黑暗中拍摄,但标题行是集合中的一行。尝试添加
if(row.index != 0)
就在foreach
内。我不记得了,但索引可能是-1。
答案 2 :(得分:0)
如何调试:
当您在DEBUG模式下运行应用程序(在Visual Studio中为F5)并抛出异常时,Visual Studio将停止并突出显示黄色的一行。这里引发了异常。在此行放置一个断点,重新启动应用程序,当它在断点处停止时,通过将鼠标悬停在该行上来观察什么是空值。
行if (combo3 == null || combo4 == null)
不能抛出NullReferenceException。我猜你运行的是旧版本的.exe,所以它会报告旧的行号。
从您的代码中,似乎row.Cells[3].Value
或combo3.Value
为空。提示:在点'.
'之前,你永远不会有空值。