1

データベーステーブルの「アカウント」値を行と列で取得し、テキストボックスに表示したいだけです。データフィル行でエラーが発生し続けます

 Imports MySql.Data.MySqlClient
Public Class Form1
Dim dataset As DataSet
Dim datatable As DataTable
Dim sqlcon As MySqlConnection
Dim dataadapter As MySqlDataAdapter
Dim sqlcommand As MySqlCommand
Dim sql As String

Private Sub retrieve_Click(sender As Object, e As EventArgs) Handles retrieve.Click

    sqlcon = New MySqlConnection("Data Source=localhost;Database=database;User ID=root;Password=;")

        sqlcon.Open()

    sql = "select * from account"
    dataadapter = New MySqlDataAdapter(sql, sqlcon)
    dataadapter.Fill(dataset)
    TextBox2.Text = dataset.Tables(0).Rows(0).Item(0).ToString()
End Sub
End Class
4

1 に答える 1

0

Fill メソッドに渡すデータセットをインスタンス化する必要があります。

....
dataset = new DataSet()
dataadapter.Fill(dataset)
...

終了したら、接続を閉じることを忘れないでください。必要のないときに開いたままにしておくと、非常にコストがかかるリソースです

Using sqlcon = New MySqlConnection("Data Source=localhost;Database=database;User ID=root;Password=;")

    sqlcon.Open()
    sql = "select * from account"
    dataadapter = New MySqlDataAdapter(sql, sqlcon)
    dataset = new DataSet()
    dataadapter.Fill(dataset)
    TextBox2.Text = dataset.Tables(0).Rows(0).Item(0).ToString()
End Using

Usingステートメントを参照してください

ただし、必要な行が 1 つだけの場合は、WHERE 句を適用してクエリを改良し、データベースから返される結果を制限することをお勧めします。

    sql = "select * from account WHERE AccountName = @name"
    dataadapter = New MySqlDataAdapter(sql, sqlcon)
    dataadapter.SelectCommand.Parameters.AddWWithValue("@name", inputNameBox.Text)
    dataset = new DataSet()
    dataadapter.Fill(dataset, "Account")
    if dataset.Tables("Account").Rows.Count > 0 then 
        TextBox2.Text = dataset.Tables("Account").Rows(0).Item(0).ToString()
    End If

これにより、必要な行だけが返されることを願っています

于 2013-05-17T23:26:17.057 に答える