0

我正在尝试弄清楚如何使用 Visual Basic 查询访问数据库,但我正在寻找有关其实际工作原理的一些解释。

我感到困惑的是,我陈述了一个命令SELECT * FROM PIPI作为表格),但在其正下方,我说的是那个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:\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
4

4 回答 4

0

像这样

"SELECT * FROM PI Where FieldName = '" & TextBox1.Text & "'"

假设您的字段类型不是数字

于 2013-06-04T02:42:45.010 回答
0

由于您使用的是 ADO.NET DataTable - 该对象由 Rows 集合组成,而每一行又由 Items 集合组成。因此,为了获得特定值,您需要使用

Table.Rows(X)(Y)

符号。即使您的查询返回单个值 - 您也会使用这种方法。查看您的代码,Items(1)尤其是您的查询似乎返回至少 2 列。

如果您只对单个值感兴趣,请考虑在查询中指定单个列名,确保它返回单行(例如,通过WHERE在查询中添加子句)并使用ExecuteScalarADO.NET 命令,这与 Fill 和DataTable 仅返回单个值。

于 2013-06-04T02:44:03.090 回答
0

不是 100% 确定我理解了这个问题,但希望这会有所帮助:

查询命令正在从数据库中的表中获取所有记录。Rows() 和 Item() 方法从特定记录(在本例中为第一条记录的第二个字段)获取特定字段。

TextBox 的 Text 属性不能单独显示整个表格:DataTable 是一个相当复杂的数据结构。文本框需要一个字符串(或类似字符串)。

于 2013-06-04T02:45:35.247 回答
0

SELECT * FROM PI告诉数据库引擎它应该从磁盘上存在的基础数据库表中检索哪些数据。

您正在使用DataTable表示内存中数据的类:DataAdapter该类从磁盘读取数据(使用 SQL 语句)并将其复制到内存中,然后您使用 Rows(0).Item(1)命令获取内存中已有数据的副本。

另一种方法是使用DataReader更直接,通常更简单的方法。就您而言,我不明白您为什么要使用该DataTable课程,因为DataReader它适合您。

于 2013-06-04T02:46:39.533 回答