我正在尝试在我的小游戏中追踪.NET错误。
这是错误:
ArgumentNullException:'table'参数不能为null
System.DataSet.Merge(DattaTable table)
它发生在下面一行,它尝试将表合并到现有数据集中。
我正在尝试执行尽可能多的检查,以确定数据集或表是否为空,但在ds.Merge行上仍然出现错误。
Dim ds As DataSet
'getData = simple function that uses SqlConnection & SqlDataAdapter to get data from my database
ds = utils.getData("Sproc_GetGameEncounters")
Dim MonsterDataSet As DataSet
MonsterDataSet = utils.getData("Sproc_MonsterDataSetFromDB")
If Not MonsterDataSet Is Nothing Then
If MonsterDataSet.Tables("TreasureList") Is Nothing OrElse MonsterDataSet.Tables("TreasureList").Rows.Count = 0 Then
'MonsterDataSet.Tables("TreasureList") is empty
Else
ds.Merge(MonsterDataSet.Tables("TreasureList")) 'line where error occurs
End If
End If
我是否可以添加更多检查以帮助修复或至少追踪此错误?
谢谢!
答案 0 :(得分:0)
我最近遇到了同样的问题。问题是适配器,它没有得到表的名称。我有类似的功能,我很乐意分享它。
您可以在填充数据集后设置表格名称,或者使用TableMappings
(TableMappings
Private Function sql_fillDataset(sql As String, Optional tablesName As String() = Nothing) As DataSet
dim sql_connection As SqlConnection
Dim command As SqlCommand
Dim adapter As New SqlDataAdapter
Dim ds = New DataSet
Try
sql_connection = New SqlConnection("YOUR_CONNECTION_STRING")
sql_connection.Open()
command = New SqlCommand(sql, sql_connection)
adapter.SelectCommand = command
adapter.Fill(ds)
If Not tablesName Is Nothing AndAlso Not ds Is Nothing AndAlso Not ds.Tables Is Nothing AndAlso ds.Tables.Count = tablesName.Length Then
For i = 0 To ds.Tables.Count - 1
ds.Tables(i).TableName = tablesName(i)
Next
End If
command.Dispose()
adapter.Dispose()
sql_connection.Close()
sql_connection.Dispose()
Return ds
Catch ex As Exception
Return Nothing
End Try
End Function
设置),但我更喜欢第一种方式。
填充数据集的功能
Dim ds As New Dataset
ds = sql_fillDataset("SELECT * FROM TABLE1")
' #### Here is your case, and you haven't the table name
ds.tables(0)
如何使用
Dim ds As New Dataset
ds = sql_fillDataset("SELECT * FROM TABLE1", New String() {"TABLE1"})
' #### Here is your solution, but the dataset have the name !!
ds.tables("TABLE1")
或
Dim ds As New Dataset
ds = sql_fillDataset("SELECT * FROM TABLE1; SELECT * FROM TABLE2", New String() {"TABLE1", "TABLE2"})
ds.tables("TABLE1")
ds.tables("TABLE2")
或者有多个表
{{1}}
希望这对你有所帮助。