Vb.net 类型为';的未处理异常;System.NullReferenceException';在Pipe Vault.exe中发生错误

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

我的提交按钮的代码昨天大部分时间都在工作,如下所述。昨天我会周期性地得到这个异常,但今天我每次都得到它。它的失败在于:

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 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”。感谢您的帮助。你解释得很清楚,这让我能够理解和学习。