Vb.net 类型为';的未处理异常;System.NullReferenceException';在Pipe Vault.exe中发生错误
我的提交按钮的代码昨天大部分时间都在工作,如下所述。昨天我会周期性地得到这个异常,但今天我每次都得到它。它的失败在于: Dim newRow As DataRow=ds.Tables(“PV_Table”).newRow() 它说纽罗什么都不是,我怎么能解决这个问题,应该是什么Vb.net 类型为';的未处理异常;System.NullReferenceException';在Pipe Vault.exe中发生错误,vb.net,ms-access,Vb.net,Ms Access,我的提交按钮的代码昨天大部分时间都在工作,如下所述。昨天我会周期性地得到这个异常,但今天我每次都得到它。它的失败在于: Dim newRow As DataRow=ds.Tables(“PV_Table”).newRow() 它说纽罗什么都不是,我怎么能解决这个问题,应该是什么 Private Sub btnCommit_Click(sender As Object, e As EventArgs) Handles btnCommit.Click Dim newRow As Data
Private Sub btnCommit_Click(sender As Object, e As EventArgs) Handles btnCommit.Click
Dim newRow As DataRow = ds.Tables("PV_Table").NewRow()
Dim cb As New OleDb.OleDbCommandBuilder(da)
cb.QuotePrefix = "["
cb.QuoteSuffix = "]"
newRow("Location") = txtLocation.Text
newRow("Project Name") = txtProjectName.Text
newRow("Pipe Date") = txtPipeDate.Text
newRow("Pipe Number") = txtPipeNumber.text
newRow("Pipe Size") = txtPipeSize.Text
newRow("Aprox Footage") = txtAproxFootage.Text
newRow("Install Date") = txtInstallDate.Text
ds.Tables("PV_Table").Rows.Add(newRow)
da.Update(ds, "PV_Table")
Me.PV_TableTableAdapter.Fill(Me.PVdbDataSet.PV_Table) 'DataGridView Binding
'SET UP THE PROVIDER
dbProvider = "PROVIDER=Microsoft.ACE.OLEDB.12.0;"
'SET THE DATABASE AND WHERE THE DATABASE IS
TheDatabase = "/PVdb.accdb"
MyFolder = "C:\Pipe Vault"
FullDatabasePath = MyFolder & TheDatabase
'SET THE DATA SOURCE
dbSource = "Data Source = " & FullDatabasePath
'SET THE CONNECTION STRING
con.ConnectionString = dbProvider & dbSource
'OPEN THE DATABASE
con.Open()
'STORE THE SQL STRING AND CONNECTION OBJECT TO THE DATA_ADAPTER
sql = "SELECT * FROM PV_table"
da = New OleDb.OleDbDataAdapter(sql, con)
da.Fill(ds, "PV_Table")
'Close THE DATABASE '
con.Close()
'ENABLES TEXT BOXES
For Each a In Me.Controls
If TypeOf a Is TextBox Then
a.Enabled = False
End If
Next
'CLEARS CONTENTS OF TEXT BOXES
txtLocation.Clear()
txtProjectName.Clear()
txtPipeDate.Clear()
txtPipeNumber.Clear()
txtPipeSize.Clear()
txtAproxFootage.Clear()
txtInstallDate.Clear()
'SETS STATES OF BUTTONS
btnCommit.Enabled = False
btnAddNew.Enabled = True
btnUpdate.Enabled = False
btnDelete.Enabled = False
End Sub
我在表单加载事件中发现,在注释“将SQL字符串和连接对象存储到数据适配器”下有相同的代码。这一切都被评论掉了。我取消了它们的注释,它似乎又开始工作了
Public Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Me.PV_TableTableAdapter.Fill(Me.PVdbDataSet.PV_Table)
'SET UP THE PROVIDER
dbProvider = "PROVIDER=Microsoft.ACE.OLEDB.12.0;"
'SET THE DATABASE AND WHERE THE DATABASE IS
TheDatabase = "/PVdb.accdb"
MyFolder = "C:\Pipe Vault"
FullDatabasePath = MyFolder & TheDatabase
'SET THE DATA SOURCE
dbSource = "Data Source = " & FullDatabasePath
'SET THE CONNECTION STRING
con.ConnectionString = dbProvider & dbSource
'OPEN THE DATABASE
con.Open()
'STORE THE SQL STRING AND CONNECTION OBJECT TO THE DATA_ADAPTER
sql = "SELECT * FROM PV_table"
da = New OleDb.OleDbDataAdapter(sql, con)
da.Fill(ds, "PV_Table")
'Close THE DATABASE '
con.Close()
'MessageBox.Show("Database is now closed")
DataGridView1.GridColor = Color.Red
End Sub
我的第一个猜测是
ds.Tables(“PV_Table”)
是Nothing
。您可以尝试将其分配给一个单独的变量,并在其后面设置一个断点吗?执行后变量包含什么?我应该声明它是什么类型的变量?我对这件事真的很陌生,对我来说太简单了。感谢您的帮助。请使用DataTable:Dim tbl As DataTable=ds.Tables(“PV_Table”)
,然后将下一行更改为Dim newRow As DataRow=tbl.newRow()
。然后在第二行上设置一个断点。当调试器点击该断点时,将鼠标悬停在变量tbl
上以查看其值。当我将鼠标悬停在tbl上时,它会显示“Nothing”。感谢您的帮助。你解释得很清楚,这让我能够理解和学习。