从SQL注入防止作为参数已经得到了广泛的建议。此外,您还可以使用Using
为你连接马上连接处理它正在使用等之后:
Using con As New OleDbConnection(DbProvider & DbSource)
con.Open()
strSQL = "SELECT * FROM Table1 WHERE Username = @UserName"
da = New OleDb.OleDbDataAdapter(strSQL, con)
da.SelectCommand.Parameters.Add("@UserName",SqlDbType.nvarchar,50).Value = Label1.Text
da.Fill(ds, "studentclasslist")
End Using
其次,你可以把一个DataTable
Dim dt as new DataTable
dt = ds.Tables(0)
的数据,并假设你有一个记录匹配,您可以通过检查Records.Count
来检查是否有记录,并且如果将它保存到DataRow
然后Textboxes
。
If (dt.Rows.Count > 0) Then
Dim dr as DataRow = dt.Rows(0)
'Field names and Textbox names below are just mine
txtUserName.Text = dr.Item("Username")
txtPassword.Text = dr.Item("Password")
txtUserlevel.Text = dr.Item("UserLevel")
End If
所以,这一切的一切话,大概是这样的:
lblUsername.Text = login.txtUsername.Text
DbProvider = "PROVIDER=Microsoft.Jet.OLEDB.4.0;"
DbSource = "Data Source = C:\loginprogram\studentclasslist.mdb"
Using con As New OleDbConnection(DbProvider & DbSource)
Dim dt as new DataTable
con.Open()
strSQL = "SELECT * FROM Table1 WHERE Username = @UserName"
da = New OleDb.OleDbDataAdapter(strSQL, con)
da.SelectCommand.Parameters.Add("@UserName",SqlDbType.nvarchar,50).Value = Label1.Text
da.Fill(ds, "studentclasslist")
dt = ds.Tables(0)
If (dt.Rows.Count > 0) Then
Dim dr as DataRow = dt.Rows(0)
'Field names and Textbox names below are just mine
txtUserName.Text = dr.Item("Username")
txtPassword.Text = dr.Item("Password")
txtUserlevel.Text = dr.Item("UserLevel")
End If
End Using
请注意,您的代码对于SQL注入攻击***开放***。你不应该把输入视为*可执行的SQL代码*。相反,使用参数化查询在SQL查询中将输入视为* values *。 – David
请扩大“不起作用”。注意你在'strSQL'定义的末尾看起来有一个额外的双引号。 “用户名”列的数据类型是什么? –
除非用户名必须是唯一的,并且他们不能改变他们的登录并且你的应用强制执行这些规则,更好的方法是将用户ID存储为变量并将其用于数据限制。 – Plutonix