【发布时间】:2015-12-08 12:09:12
【问题描述】:
我创建了一个使用 localhost 连接从数据库读取数据的应用程序。
现在,在加载事件中,我建立连接并将所有可用的表名插入ComboBox1,此控件允许我选择表我想在哪里读取数据。
你怎么看我已经创建了getData() 函数,这个函数是从ComboBox1 中的选定表中获取数据所必需的。
现在的问题是,当我第二次选择另一个表时,我加载了先前表的列,但我不知道为什么,因为我使用的是 .Clear() 我也尝试过使用 .Reset()这似乎有效,但如果我使用.Reset(),我会得到空表值。
另一件很烦人的事情是使用更多DataTable,事实上,如果我在getData() 函数中也只使用myName,我还获得属性Table_Name,那么也可以优化代码吗?
代码:
Imports MySql.Data.MySqlClient
Public Class DataIn
Dim myCommand As New MySqlCommand
Dim myAdapter As New MySqlDataAdapter
Dim myName As New DataTable
Dim myData As New DataTable
Dim SQL As String
Dim MysqlConn As MySqlConnection
Private Sub DataIn_Load(sender As Object, e As EventArgs) Handles MyBase.Load
MysqlConn = New MySqlConnection()
MysqlConn.ConnectionString = "server=localhost;" _
& "user id=root;" _
& "password=123456789;" _
& "database=calendario"
Try
MysqlConn.Open()
myCommand.Connection = MysqlConn
myCommand.CommandText = SQL
myAdapter.SelectCommand = myCommand
myAdapter.Fill(myName)
For intcount = 0 To myName.Rows.Count - 1
ComboBox1.Items.Add(myName.Rows(intcount).Item(0))
Next
Catch myerror As MySqlException
MessageBox.Show(myerror.Message)
Finally
MysqlConn.Close()
MysqlConn.Dispose()
End Try
End Sub
Private Sub ComboBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox1.SelectedIndexChanged
getData()
End Sub
Public Sub getData()
Try
SQL = "SELECT * FROM " & ComboBox1.SelectedItem.ToString()
myCommand.CommandText = SQL
myAdapter.SelectCommand = myCommand
myData.Clear()
myAdapter.Fill(myData)
DataGridView1.DataSource = Nothing
DataGridView1.DataSource = myData
Catch ex As Exception
MessageBox.Show(ex.Message)
Finally
MysqlConn.Close()
MysqlConn.Dispose()
End Try
End Sub
End Class
【问题讨论】:
-
尝试
dt.Rows.Clear()并确保您的选择查询不会每次都检索相同的值(这可能是一个原因)跨度> -
在数据网格上还是在 myData 上?
-
在数据表上.........
myData.Rows.Clear()