【发布时间】:2017-05-15 22:58:44
【问题描述】:
我的项目中目前有以下代码,它使用 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?
提前感谢您的帮助。
【问题讨论】:
-
创建和填充数据集而不是数据表。您不需要 DataSet 来获取行数 - 它们大多只是一个表集合。如果您想在其他地方使用它,您可能想要制作一个表单级别的对象 - 但如果您没有丢弃它,您可以对您的表格做同样的事情
-
MaxRows = ds.Tables("Dataset_Users").Rows.Count请注意,DataSet 不包含任何数据。它包含 1 个或多个表:注意代码如何钻入集合以作用于特定表。您也可以在创建表时得到它:MaxRows = Adapter.Fill(Table) -
PerformQuery()方法存在严重缺陷,因为它迫使您编写极易受到 SQL 注入攻击的代码。除了查询文本之外,您还需要向该方法添加一个附加参数以接受查询数据,然后进一步更新该方法以使用该数据创建参数化查询。