如何从此代码在VB.NET中创建数据集?

时间:2017-01-01 15:38:21

标签: vb.net dataset oledb

我目前在我的项目中有以下代码,它使用SQL查询的结果填充DataGridView对象。

Sub PerformQuery(ByVal SQLText As String)
    Dim DbConnection As New OleDb.OleDbConnection(createConnectionString)

    Dim SQLQuery As String = SQLText

    Dim Adapter As New OleDb.OleDbDataAdapter(SQLQuery, DbConnection)

    Try
        Using Table As New DataTable
            Adapter.Fill(Table)
            Table.Locale = Globalization.CultureInfo.InvariantCulture
            DbConnection.Close()
            DataGridView1.DataSource = Table
        End Using
    Catch ex As Exception
        MsgBox(ex.Message)
    End Try
End Sub

在我的项目的其他地方,我可以使用代码

创建一个DataSet对象
Dim ds As New DataSet

然后使用以下代码从中提取数据:

MaxRows = ds.Tables("Dataset_Users").Rows.Count

我如何使用PerformQuery代码创建数据集,而不是填充DataGridView?

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

我认为你是在追求以下内容:

Try
    Dim ds As New DataSet
    Using Table As New DataTable
        Adapter.Fill(Table)
        Table.Locale = Globalization.CultureInfo.InvariantCulture
        DbConnection.Close()
        DataGridView1.DataSource = Table
        ds.Table.Add(Table)
    End Using
Catch ex As Exception
    MsgBox(ex.Message)
End Try

或者在您的示例中,您在数据集中的行数之后可以使用DataTable执行相同的操作,例如:

Try
    Dim MaxRows As Integer
    Using Table As New DataTable
        Adapter.Fill(Table)
        Table.Locale = Globalization.CultureInfo.InvariantCulture
        DbConnection.Close()
        DataGridView1.DataSource = Table

        '' Getting the number of rows in the DataTable
        MaxRows = Table.Rows.Count
    End Using
Catch ex As Exception
    MsgBox(ex.Message)
End Try

答案 1 :(得分:0)

以更实用的方式思考。 返回表而不是设置为网格。虽然我们在这里,但是让我们更新这个方法,这样您就不必再编写查询了,这让您对sql注入攻击持开放态度:

Function PerformQuery(ByVal SQLText As String, ByVal ParamArray Parameters() As OleDbParameter) As DataTable
    Dim result As New DataTable()

    Using cn As New OleDb.OleDbConnection(createConnectionString), _
          cmd As New OleDb.OleDbCommand(SQLText, cn), _
          Adapter As New OleDb.OleDbDataAdapter(cmd, cn)

        If Parameters IsNot Nothing AndAlso Parameters.Length > 0 Then
            cmd.Parameters.AddRange(Parameters)
        End If
        Adapter.Fill(result)
    End Using

    Return Result
End Function

请注意,我还删除了错误处理和区域设置代码。您仍然需要这样做,但是当您想要返回一个数据表而不是直接与方法中的用户界面交互时,您已经有效地将代码移动到较低的抽象级别。当你这样做时,你可能不想再处理这个较低级别的错误处理了;相反,让异常冒泡,你可以在更靠近用户界面处理它们。

现在你调用这样的更新方法:

Dim sql As String = "SELECT * FROM Customers WHERE CustomerID = ?"
Dim CustID As New OleDb.OleDbParameter("CustomerId", OleDbType.Integer)
CustID.Value = 123456

Try
    DataGridView1.DataSource = PerformQuery(sql, CustID)
Catch Ex As Excpetion
    MsgBox(Ex.Message)
End Try