我有一个组合框,用户可以在其中选择表中的用户名,我想知道是否可以通过该用户名获取该表的主键。
我尝试过,但是似乎无法获取数据,因为用户名不是唯一的,我认为它不会起作用。
SELECT * FROM Users WHERE User = John
我只想要一种通过用户名获取主键的方法。
答案 0 :(得分:0)
如果您实际上是想从查询中获取PK,则可以使用ExecuteScalar方法来完成。查询不起作用的原因是,您需要将搜索字符串括在单引号中。 'johnny'或用户参数,这是首选方法。下面是一个示例,假定PK是整数类型。
Jimi提出了一个很好的建议,如果您已经将数据包含在数据表中,则只需将pkcolumn用作组合框上的ValueMember即可,而无需再次访问数据库
Private Function GetPK(ByVal Uid As String) As Integer
Using SqlConn As New SqlClient.SqlConnection("Your connection string")
Using Cmd As New SqlClient.SqlCommand("SELECT TOP 1 PKColumn FROM TABLENAME WHERE UsernameColumn =@UserName")
Cmd.Parameters.Add("@UserName", SqlDbType.VarChar).Value = Uid
Dim PkObj As Object = Cmd.ExecuteScalar
If PkObj IsNot Nothing Then
Return CType(PkObj, Integer)
Else
'user not found
Return Nothing
End If
End Using
End Using
End Function