2010-11-21 108 views
-2

edittted:異常:System.NullReferenceException:未將對象引用設置爲對象的實例。在C#中?

我已經調試,我弄清楚,有一次我填寫的所有字段,autmatically生成一個新的行空的,一旦它被保存在dabase,它與循環的foreach跟隨,並automaticaly檢測空引用這是一個圖像,我希望你能理解我img8.imageshack.us/i/error3xh.jpg

我需要你的幫助,我無法控制異常,這裏是我的方法和錯誤說System .NullReferenceException:對象引用未設置爲對象的實例「,我該如何解決它,控制exeption,不再有這種類型的消息?,不管它的結構如何:錯誤是行** if(combo3 == null || combo4 == null)**

alt text

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最終德埃斯特mensaje對 obtenerMÁSdetalles自我COMO invocar一拉depuración剛剛在時間 (JIT) en lugar de a este cuadro de diálogo。

**************文件格式錯誤************** System.NullReferenceException: Referencia a objeto no establecida como instancia de un objeto。烯 Office.Form1.btnCronograma_Click(對象 發件人,EventArgs的)烯 C:\用戶\阿默裏\文件\ TEC \ Septimo Semestre \ Administracion德PROYECTOS 德INGENIERIA德 softwaere \ nuevo4 \努埃沃\辦公室\辦公室\ 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(Message & m,MouseButtons button,Int32 clicks) 烯System.Windows.Forms.Control.WndProc(消息& 米)烯 System.Windows.Forms.ButtonBase.WndProc(消息& 米)烯 System.Windows.Forms.Button.WndProc(消息& 米)烯 System.Windows.Forms.Control.ControlNativeWindow.OnMessage(消息& 米)烯 System.Windows.Forms.Control.ControlNativeWindow.WndProc(消息& 米)烯 System.Windows.Forms.NativeWindow。回調(IntPtr hWnd,Int32 msg,IntPtr wparam,IntPtr lparam)

+0

哪一行給出錯誤?我在猜'int.Parse'的一行。 – ChrisF 2010-11-21 19:52:05

+0

錯誤是在行if(combo3 == null || combo4 == null) – peggalvan 2010-11-21 19:57:52

+0

我刪除該行和錯誤說在foreach(dataGridView8.Rows DataGridViewRow行),我不知道 – peggalvan 2010-11-21 20:06:26

回答

3

我認爲最可能的原因是row.Cells[3].Valuerow.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()); 
+0

我改變了代碼,但我仍然得到相同的錯誤信息 – peggalvan 2010-11-21 20:02:26

+0

你是否打算使用break;而不是繼續; ?什麼是dataGridView8?它有價值嗎?什麼dataGridView8.Rows?添加MessageBox.Show(dataGridView8.ToString())anf MessageBox.Show(dataGridView8.Rows.Count.ToString()) – Aliostad 2010-11-21 20:22:22

+0

不,我只是刪除該行,但現在錯誤是在foreach(dataGridView8.Rows DataGridViewRow行), datagridview8在我的圖像,它沒有一個值,一個消息框只是爲了看到正在採取正確的值 – peggalvan 2010-11-21 20:30:01

0

這僅僅是一個在黑暗中拍攝,但標題行是集合中的行之一。嘗試加入

if(row.index != 0) 

正好在foreach之內。我不記得了,但索引可能是-1。

+0

我已經調試,我發現一旦我填滿所有的領域,自動生成一個新的行空,並且一旦它存儲在數據庫中,它隨循環foreach,並自動檢測空引用這是一個圖像,我希望你瞭解我img8.imageshack.us/i/error3xh.jpg – peggalvan 2010-11-21 21:02:00

0

如何調試:

當您運行在調試模式下的應用程序(在Visual Studio F5),並引發異常,Visual Studio將停止,並突出顯示黃線。這裏拋出了異常。在此行放置一個斷點,重新啓動應用程序,並在斷點處停止時,將鼠標懸停在行上以觀察null值。

if (combo3 == null || combo4 == null)不能拋出NullReferenceException。我猜你正在運行舊版本的.exe,因此它會報告舊的行號。

從您的代碼看來,row.Cells[3].Valuecombo3.Value爲空。提示:在點'.'之前,你永遠不能有空值。

+0

我已經調試,row.cell [3]。當用戶從組合框中選擇一些東西時,如果lopp foreach到達它所產生的空白空間,.value和combo3.value爲null,但是我怎樣才能解決這個問題,我試過但沒有任何反應。 – peggalvan 2010-11-21 22:22:38

+0

int idProyecto = int.Parse(combo3.Value.ToString()== null?「0」:combo3.Value.ToString()); int idMes = int.Parse(combo4.Value.ToString()== null?「0」:combo4.Value。的ToString()); INT元= int.Parse(row.Cells [3]。價值== NULL 「0」:?row.Cells [3] .Value.ToString()); int real = int.Parse(row.Cells [4] .Value == null?「0」:row.Cells [4] .Value.ToString()); – peggalvan 2010-11-21 22:23:10

相關問題