我试图弄清楚如何使用visual basic查询访问数据库,但我正在寻找一个关于它如何实际工作的一些解释。
我感到困惑的是,我陈述了一个命令SELECT * FROM PI
(PI
作为表格),但直接在那之下,我说的是TextBox1.Text = theDataTable.Rows(0).Item(1)
。
我只是想知道为什么我有一个查询命令,然后是一个单独的命令,它将转到指定的Row和Item ....任何帮助都非常感谢!
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:\Users\Marc Wilson\Documents\FiddleFuckDB.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
答案 0 :(得分:0)
喜欢这个
"SELECT * FROM PI Where FieldName = '" & TextBox1.Text & "'"
假设您的字段类型不是数字
答案 1 :(得分:0)
由于您正在使用ADO.NET DataTable - 该对象由Rows集合组成,而每一行又由Items集合组成。因此,为了获得特定值,您需要使用
Table.Rows(X)(Y)
符号。即使您的查询返回单个值 - 您也可以使用此方法。特别是查看代码和Items(1)
,看起来您的查询至少返回2列。
如果您只对单个值感兴趣,请考虑在查询中指定单个列名,确保它返回单行(例如,通过向查询添加WHERE
子句)并使用{{ 1}} ADO.NET命令,与Fill和DataTable不同,仅返回单个值。
答案 2 :(得分:0)
不是100%肯定我会回答这个问题,但希望这会有所帮助:
query命令从数据库中的表中获取所有记录。 Rows()和Item()方法从特定记录中获取特定字段(在本例中为第一个记录的第二个字段)。
TextBox的Text属性无法独立显示整个表:DataTable是一个相当复杂的数据结构。 TextBoxes需要一个字符串(或类似的字符串)。
答案 3 :(得分:0)
SELECT * FROM PI
告诉数据库引擎它应该从存在于 on-disk 的底层数据库表中检索哪些数据。
您正在使用表示数据 in-memory 的DataTable
类:DataAdapter
类从磁盘读取数据(使用SQL语句)并将其复制到内存中然后,您可以使用Rows(0).Item(1)
命令获取内存中已有数据的副本。
另一种方法是使用更直接,更简单的DataReader
。在你的情况下,我不明白为什么你使用DataTable
课,因为DataReader
对你很好。