我试图找出如何使用visual basic查询access db,但我正在寻找关于这实际上是如何工作的一点解释。
我感到困惑的是,我陈述了一个命令SELECT * FROM PI
(PI
作为表),但在它的正下方,我说的是TextBox1.Text = theDataTable.Rows(0).Item(1)
.
我只是想知道为什么我有一个查询命令,然后是一个单独的命令,要到指定的行和项目....任何帮助都非常感激!
Imports System.Data.OleDb
Public Class Form1
Dim theConnectionString As New OleDbConnection
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
txtSQL.Clear()
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
theConnectionString.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:UsersMarc WilsonDocumentsFiddleFuckDB.accdb"
theConnectionString.Open()
Dim theDataSet As New DataSet
Dim theDataTable As New DataTable
theDataSet.Tables.Add(theDataTable)
Dim theDataAdapter As New OleDbDataAdapter
theDataAdapter = New OleDbDataAdapter("SELECT * FROM PI", theConnectionString)
theDataAdapter.Fill(theDataTable)
TextBox1.Text = theDataTable.Rows(0).Item(1)
theConnectionString.Close()
End Sub
End Class
像这样
"SELECT * FROM PI Where FieldName = '" & TextBox1.Text & "'"
假定您的字段类型不是数字
由于您使用的是ADO。. NET DataTable -该对象由Rows集合组成,而每一行又由Items集合组成。所以为了得到一个特定的值你需要使用
Table.Rows(X)(Y)
符号。即使查询返回单个值,也可以使用这种方法。特别是查看您的代码和Items(1)
,看起来您的查询至少返回2列。
如果您只对单个值感兴趣,请考虑在查询中指定单个列名,确保它返回单行(例如通过在查询中添加WHERE
子句)并使用ExecuteScalar
ADO。. NET命令,与Fill和DataTable不同,它只返回单个值。
不是100%确定我理解这个问题,但希望这有助于:
查询命令是从数据库中的表中获取所有记录。Rows()和Item()方法从特定记录中获取特定字段(在本例中是第一个记录的第二个字段)。
TextBox的Text属性不能单独显示整个表:DataTable是一个相当复杂的数据结构。文本框需要一个字符串(或类似的东西)。
SELECT * FROM PI
告诉数据库引擎应该从磁盘上存在的底层数据库表中检索哪些数据。
你正在使用的DataTable
类,它表示数据在内存: DataAdapter
类从磁盘读取数据(使用SQL语句)并将其复制到内存中,然后使用Rows(0).Item(1)
命令来获取已经在内存中的数据的副本。
另一种选择是使用DataReader
,它更直接,通常更简单。在你的情况下,我不明白你为什么要使用DataTable
类,因为DataReader
会很适合你。