尝试将表合并到数据集时出现顽固错误

时间:2018-03-07 18:04:06

标签: vb.net dataset

我正在尝试在我的小游戏中追踪.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

我是否可以添加更多检查以帮助修复或至少追踪此错误?

谢谢!

1 个答案:

答案 0 :(得分:0)

我最近遇到了同样的问题。问题是适配器,它没有得到表的名称。我有类似的功能,我很乐意分享它。

您可以在填充数据集后设置表格名称,或者使用TableMappingsTableMappings 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}}

希望这对你有所帮助。