iT邦幫忙

0

NullReferenceException問題

GJ 2019-05-09 19:14:02334 瀏覽

程式碼如下,用意是把DATAGRIDVIEW的資料insert 到資料庫
偵錯試RUN還是可以正常insert資料,中斷點到END IF時出現
錯誤NullReferenceException並未將物件參考設定為物件的執行個體
錯誤指向 sqlcmd.Parameters第一行
請問是甚麼原因會這樣?(asp.net)

 Sub insdatafile()

        Dim cn2 As New SqlConnection(My.Settings.tbltw)

        cn2.Open()

        Dim sqlcmd As New SqlCommand

        Dim delstr As String = "delete  from Eai104"

        sqlcmd.Connection = cn2

        sqlcmd.CommandText = delstr

        sqlcmd.ExecuteNonQuery()

        Dim tran As SqlTransaction

        tran = cn2.BeginTransaction

        For i As Integer = 0 To DataGridView1.RowCount - 1 Step 1


            Try
                If DataGridView1.RowCount > 0 Then
                    sqlcmd.CommandText = "insert into Eai104 (ma01,ma02,ma021,ma58) values (@ma01,@ma02,@ma021,@ma58)"
                  
                    sqlcmd.Connection = cn2

                    sqlcmd.Parameters.Clear()

                    sqlcmd.Parameters.AddWithValue("@ma01", DataGridView1.Rows(i).Cells(0).Value.ToString)
                    sqlcmd.Parameters.AddWithValue("@ma02", DataGridView1.Rows(i).Cells(1).Value.ToString)
                    sqlcmd.Parameters.AddWithValue("@ma021", DataGridView1.Rows(i).Cells(2).Value.ToString)
                    sqlcmd.Parameters.AddWithValue("@ma58", DataGridView1.Rows(i).Cells(3).Value)
                   

                    sqlcmd.Transaction = tran
                    sqlcmd.ExecuteNonQuery()

                End If

            Catch ex As Exception
                   MessageBox.Show(ex.ToString)
            End Try
        Next
        tran.Commit()
   
        cn2.Close()

        cn2.Dispose()
    End Sub

1 個回答

0
小魚
iT邦高手 1 級 ‧ 2019-05-09 23:26:56
最佳解答

那就是那一行的值是NULL,
你要看一下DataGridView裡面的值是什麼...

GJ iT邦研究生 5 級 ‧ 2019-05-10 08:45:46 檢舉

我發現好像會把GridView裡最後一行
空白新增行給寫入,看起來這原因的樣子

小魚 iT邦高手 1 級 ‧ 2019-05-10 13:42:06 檢舉

很好奇為什麼會直接抓DataGirdView的資料,
不過如果只是要避免這個錯誤的話,
就是先判斷確定不是NULL之後,
再使用ToString().
如果是NULL的看是要跳過或是怎麼處理...

GJ iT邦研究生 5 級 ‧ 2019-05-13 15:12:21 檢舉

用意是GirdView給user確認資料
再轉到user拖拉報表用的db上去

我要發表回答

立即登入回答