我在ComboBox和一些TextBoxes中有一个用户名列表。当ComboBox文本更改时(即,我从ComboBox中选择了一些用户名),TextBox中将填充数据库中的用户详细信息。
我有代码可以在SQL数据库中实现此目的。但是这些查询不适用于MsAccess数据库。
MysqlConn = New MySqlConnection
Mysql.ConnectionString = "server=localhost;user=root;password=root;database=database"
Dim READER As MySqlDataReader
Try
MysqlConn.open()
Dim Query As String
Query("select * from database.usernames where name='" & ComboBox1.Text & "'")
Command = New MySqlCommand(Query, MysqlConn)
READER = Command.ExecuteReader
While READER.Read
TextBox1.Text = READER.GetString("name")
End While
End Try
答案 0 :(得分:0)
这是我的答案。请不要被它淹没。 ;)
代码损坏
首先,据我所知,您提供的代码根本无法工作,因为:
您的Query
变量以无效(或至少非常奇怪的)方式初始化。您可能想使用类似这样的东西:
Dim Query As String
Query = "select * from database.usernames where name='" & ComboBox1.Text & "'"
或一行:
Dim Query As String = "select * from database.usernames where name='" & ComboBox1.Text & "'"
,您尝试将连接字符串分配给不存在的ConnectionString
变量的Mysql
属性。或者变量存在是因为它在其他地方声明,这可能是您的代码片段中的错误。但是我假设您想将连接字符串分配给MysqlConn.ConnectionString
属性。
您尚未在任何地方声明MysqlConn
和Command
变量。您只需分配给他们。 (我只是假设您已在代码的其他位置正确声明了变量...)
IDataRecord
接口没有提供GetString(name As String)
方法重载。因此,除非您为其定义了自定义扩展方法,否则可能还需要使用IDataRecord.GetOrdinal(name As String)
方法,或者使用列索引而不是列名。
无论如何,您提供的代码使用MySQL。因此,我假设MySQL是您成功使用的“ SQL数据库”。正如您所说,这似乎行得通吗?嗯...嗯...那么我只是假设您的代码段是完全正确的,并且可以与MySQL完美配合...:/
MS Access与MySQL
使用MS Access需要其他数据访问类(可能是名称空间System.Data.OleDb
中的类)和另一个connection string。您可以在Microsoft文档中查看此ADO.NET OleDb example for MS Access。
您甚至可能必须更新SQL查询,因为每个数据库系统都使用自己的SQL方言。您可能需要咨询Office documentation。但是您的查询非常简单,因此可能要做的就是使其与MS Access兼容:
name
标识符(因为它是MS Access中的保留关键字)。我个人在SQL查询中定界了所有标识符,只是为了避免与保留关键字的意外冲突。所以我个人会使用这样的东西:
select * from [usernames] where [name] = '...'
其他提示
此外,我想向您提供一些其他有关改进代码的提示(不相关):
Using
-statements与IDisposable
类型的变量一起使用。如果没有充分的理由,这些类型/类将不会实现该接口,因此我认为在处理完此类一次性对象(或使用Dispose
之后,调用Using
并不重要隐式调用Dispose
的语句)。示例
您可以看一下以下代码片段。它可能无法提供开箱即用的示例,但您可能会从中获得一些有用的/实用的想法:
Dim connectionString As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\Data\\database.mdb;User Id=admin;Password="
Dim query As String = "select * from [usernames] where [name] = @Name"
Using conn As New OleDbConnection(connectionString)
Using command As New OleDbCommand(query)
command.Parameters.Add("@Name", OleDbType.VarChar, 50).Value = ComboBox1.Text
conn.Open()
Using reader As OleDbDataReader = command.ExecuteReader
If reader.Read Then
textbox1.Text = reader.GetString(reader.GetOrdinal("name"))
End If
End Using
End Using
End Using