Mysql 如何获取帐户中的用户名?

Mysql 如何获取帐户中的用户名?,mysql,vb.net,Mysql,Vb.net,我正在制作一个连接到MySql数据库的VB.Net应用程序。 我的应用程序有许多帐户,每个帐户都有几个用户。我想显示这些信息,但应用程序只显示每个帐户的第一个用户 代码如下: Public Function id(Label2 As String) As Double Using connection = Getconnection() connection.Open() Using commandid = New MySqlCommand

我正在制作一个连接到MySql数据库的VB.Net应用程序。 我的应用程序有许多帐户,每个帐户都有几个用户。我想显示这些信息,但应用程序只显示每个帐户的第一个用户

代码如下:

Public Function id(Label2 As String) As Double
    Using connection = Getconnection()
        connection.Open()
        Using commandid = New MySqlCommand
            commandid.Connection = connection
            commandid.CommandText = "SELECT *FROM player.player
            Where player.account_id=" & testString & V
            Dim read = commandid.ExecuteReader
            If read.HasRows Then
                While read.Read
                    ActivateUser.namecharacter = read.GetString(2)
                    ActivateUser.job = read.GetString(3)
                End While
                read.Dispose()
                Return True
            Else
                MessageBox.Show(" no ")
                Return False
            End If
            connection.Close()
            connection.Dispose()
        End Using
    End Using
End Function

如何修复此问题以显示帐户中的所有用户?

只需在使用连接的方法中创建连接即可。摆脱
GetConnection
只需为连接字符串使用一个类级变量

在使用之前不要打开连接

通过在第一行末尾添加逗号,可以在同一个using块中包含该命令。命令也需要处理。命令构造函数可以将
CommandText
连接
作为参数

数据库中的
account\u id
是什么数据类型?我猜它是字符串类型。
V
是变量还是字符串“V”?我要猜一个硬编码字符串。
testString
来自哪里?我猜
Label2
(可怕的非描述性名称)是
teststring

从不为sql连接字符串始终使用参数

读卡器也需要关闭和放置,以便使用块。访问数据库的整个想法是尽快进出。不要设置ActivateUser的属性,也不要显示消息框。用户可能已经去吃午饭了,而您的连接却在微风中飘荡

函数的数据类型为
Double
,但返回语句为
Boolean
s。不行

无需关闭和处理连接。
结束时使用
即可完成此操作

Private ConStr As String = "Your connection string"

Public Function id(Label2 As String) As DataTable
    Dim dt As New DataTable
    Using connection As New MySqlConnection(ConStr),
            commandid As New MySqlCommand("SELECT *FROM player Where account_id= @TestString;", connection)
        commandid.Parameters.Add("@TestString", MySqlDbType.VarChar).Value = Label2 & "V"
        connection.Open()
        Using reader = commandid.ExecuteReader
            dt.Load(reader)
        End Using
    End Using
    Return dt
End Function
然后返回用户界面代码:

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim dt = id(Label2.Text)
    If dt.Rows.Count > 0 Then
        ActivateUser.namecharacter = dt(0)(2).ToString
        ActivateUser.job = dt(0)(3).ToString
    Else
        MessageBox.Show(" no ")
    End If
End Sub

这可以很好地将从数据库代码中分离出来。

请注意,这是SQLi易受攻击的,请始终使用参数。只有一个
ActivateUser
对象。这段代码将结果快速连续地设置为同一个对象,因此我们只能看到最后一个。您需要重新设计您的用户界面,以创建一个显示所有用户的位置,或在其中循环。我们无法帮助您做到这一点,因为我们无法看到您的窗体或屏幕设计。对于多对多解决方案,您可能需要一个连接表。每个帐户在一个表中。每个用户在另一个表中。然后是第三个带有AccountID和UserID的表。谢谢大家的评论和回答,你真的找到了解决方案,我很感谢你。谢谢你仍然只显示了一个用户,但这肯定是要解决的第一个也是最重要的问题。