我无法修复此空引用异常
Dim Conn As New OleDb.OleDbConnection
Dim Trans As OleDb.OleDbTransaction
Try
' create the stream writer object
Dim FS As New System.IO.StreamReader(FileName)
' open DB connection and start a transaction
Dim Tmp As New POSDSTableAdapters.ItemsTableAdapter
Conn.ConnectionString = Tmp.Connection.ConnectionString
Conn.Open()
Trans = Conn.BeginTransaction
' clear all tables
Dim CMD As New OleDb.OleDbCommand
CMD.CommandText = " delete from ReciptDetails"
CMD.Connection = Conn
CMD.Transaction = Trans
CMD.ExecuteNonQuery()
CMD.Dispose()
CMD = New OleDb.OleDbCommand
CMD.CommandText = " delete from Recipts"
CMD.Connection = Conn
CMD.Transaction = Trans
CMD.ExecuteNonQuery()
CMD.Dispose()
CMD = New OleDb.OleDbCommand
CMD.CommandText = " delete from items"
CMD.Connection = Conn
CMD.Transaction = Trans
CMD.ExecuteNonQuery()
CMD.Dispose()
CMD = New OleDb.OleDbCommand
CMD.CommandText = " delete from RestorantTable"
CMD.Connection = Conn
CMD.Transaction = Trans
CMD.ExecuteNonQuery()
CMD.Dispose()
CMD = New OleDb.OleDbCommand
CMD.CommandText = " delete from [Values]"
CMD.Connection = Conn
CMD.Transaction = Trans
CMD.ExecuteNonQuery()
CMD.Dispose()
' load the tables
If Not LoadTableFromBackup(Conn, Trans, FS, "RestorantTable") Then
Trans.Rollback()
Conn.Close()
FS.Close()
Return False
End If
If Not LoadTableFromBackup(Conn, Trans, FS, "Values") Then
Trans.Rollback()
Conn.Close()
FS.Close()
Return False
End If
If Not LoadTableFromBackup(Conn, Trans, FS, "items") Then
Trans.Rollback()
Conn.Close()
FS.Close()
Return False
End If
If Not LoadTableFromBackup(Conn, Trans, FS, "Recipts") Then
Trans.Rollback()
Conn.Close()
FS.Close()
Return False
End If
If Not LoadTableFromBackup(Conn, Trans, FS, "ReciptDetails") Then
Trans.Rollback()
Conn.Close()
FS.Close()
Return False
End If
FS.Close()
Trans.Commit()
Conn.Close()
Return True
Catch ex As Exception
Trans.Rollback()
Conn.Close()
Return False
End Try
End Function
答案 0 :(得分:2)
根据您上面的评论,似乎永远不会为Trans
分配值。看一下代码的一小部分样本:
Try
' create the stream writer object
Dim FS As New System.IO.StreamReader(FileName)
' open DB connection and start a transaction
Dim Tmp As New POSDSTableAdapters.ItemsTableAdapter
Conn.ConnectionString = Tmp.Connection.ConnectionString
Conn.Open()
Trans = Conn.BeginTransaction
' the rest of the code...
Catch ex As Exception
Trans.Rollback()
Conn.Close()
Return False
End Try
您的Catch
阻止假定Trans
和Conn
具有值。但是,如果在行[{1}}之前抛出异常,则永远不会为Trans = Conn.BeginTransaction
分配值,因此它将为Trans
({{1}在VB)。
这里发生的事情是之前该行正在抛出异常。但是,您的异常处理程序本身会抛出一个完全不同的异常。这基本上掩盖了第一个异常,即您尝试查找的实际错误。
使用调试器,在null
上设置一个断点并查看原始异常是什么,这是您需要纠正的内容。
除此之外,您可以稍微重新构造Nothing
块,以免假设变量具有值。只是为了让你作为初学者,至少你可以在你的Trans.Rollback()
区块中执行此操作:
Try/Catch
答案 1 :(得分:1)
这不是错误。这是一个警告,因为您在分配之前使用了trans。移动Conn.Open() 尝试之前Trans = Conn.BeginTransaction,你将解决它。