需要帮助从 VB.Net 中的 While 循环中提取变量
Need help extracting variables from a While Loop in VB.Net
我是编码新手,所以如果我的问题看起来很基础,请原谅我,但我在从这个 While 循环中提取我的变量以便使用我的 SQL 查询的结果时遇到了一些问题用于验证。
下面的脚本是 .aspx 表单上登录按钮的事件处理,处理将列在相关 MSSQL 数据库中的电子邮件和登录字段:
Public Class _Default
Inherits System.Web.UI.Page
Protected Sub submit_Click(sender As Object, e As EventArgs) Handles submit.Click
Dim Column1 As String
Dim Column2 As String
Dim SQL = "SELECT * FROM Logins WHERE Email='" & email.Text & "' AND Password='" & password.Text & "'"
Dim oSqlDataReader As System.Data.SqlClient.SqlDataReader = Nothing
Using oSqlConnection As New System.Data.SqlClient.SqlConnection("SERVER=[Server Name];UID=[User];PWD=[Pass];DATABASE=[Database Name]")
oSqlConnection.Open()
Using oSqlCommand As New System.Data.SqlClient.SqlCommand(SQL, oSqlConnection)
oSqlDataReader = oSqlCommand.ExecuteReader
While oSqlDataReader.Read
Column1 = oSqlDataReader(name:="Email")
Column2 = oSqlDataReader(name:="Password")
End While
End Using
oSqlConnection.Close()
End Using
If "Column 1 etc."
End if
End Sub
End Class
据我所知,我的代码没有任何错误,但每次我尝试创建 If 语句时,我的变量 Column 1 and Column 2
都未声明,因此无法使用。
如果有人可以帮助我的代码或遗漏区域进行正确的布局,并解释我哪里出错了,那就太好了。
如果在循环内移动 If
块,是否会更接近您期望的行为?
Protected Sub submit_Click(sender As Object, e As EventArgs) Handles submit.Click
Dim Column1 As String
Dim Column2 As String
Dim SQL = "SELECT * FROM Logins WHERE Email='" & email.Text & "' AND Password='" & password.Text & "'"
Dim oSqlDataReader As System.Data.SqlClient.SqlDataReader = Nothing
Using oSqlConnection As New System.Data.SqlClient.SqlConnection("SERVER=[Server Name];UID=[User];PWD=[Pass];DATABASE=[Database Name]")
oSqlConnection.Open()
Using oSqlCommand As New System.Data.SqlClient.SqlCommand(SQL, oSqlConnection)
oSqlDataReader = oSqlCommand.ExecuteReader
While oSqlDataReader.Read
Column1 = oSqlDataReader(name:="Email")
Column2 = oSqlDataReader(name:="Password")
If "Column 1 etc....."
End if
End While
End Using
oSqlConnection.Close()
End Using
End Sub
可能是您的查询没有返回任何行,或者返回的值为 dbNull 或什么都没有。如果合适,我会检查返回的数据和错误。
尝试运行 直接对数据库进行查询。你回来了吗?
为避免错误,您可以将字符串声明为 String.empty
Dim Column1 As String = String.empty
或者,在 if 语句中使用它时不检查任何内容:
If Column1 Is Not Nothing AndAlso ...
不要使用字符串连接来构建您的 sql 查询。而是使用 sql 参数来防止 sql 注入和其他问题。
我必须承认我不知道这个语法:oSqlDataReader(name:="Email")
。使用以下内容:
Dim email As String
Dim password As String
Dim sql = "SELECT * FROM Logins WHERE Email=@Email AND Password=@Password"
Using oSqlConnection As New System.Data.SqlClient.SqlConnection("SERVER=[Server Name];UID=[User];PWD=[Pass];DATABASE=[Database Name]")
Using oSqlCommand As New System.Data.SqlClient.SqlCommand(sql, oSqlConnection)
oSqlCommand.Parameters.Add("@Email", SqlDbType.VarChar).Value = email.Text
oSqlCommand.Parameters.Add("@Password", SqlDbType.VarChar).Value = password.Text
oSqlConnection.Open()
Using oSqlDataReader = oSqlCommand.ExecuteReader()
If oSqlDataReader.Read() Then
Dim emailColIndex = oSqlDataReader.GetOrdinal("Email")
Dim pwdColIndex = oSqlDataReader.GetOrdinal("Password")
email = oSqlDataReader.GetString(emailColIndex)
password = oSqlDataReader.GetString(pwdColIndex)
End If
End Using
End Using
End Using ' oSqlConnection.Close() not needed with using '
If email IsNot Nothing AndAlso password IsNot Nothing Then
End If
但是,您不应初始化两个字符串变量,而应实现可以初始化的 Login
class 和 return 方法。您不想知道电子邮件和密码,因为您已经有了它们。
由于这是 ASP.NET,我建议查看可用的 membership provider,它们功能强大且具有学习曲线,但绝对值得花时间。
我是编码新手,所以如果我的问题看起来很基础,请原谅我,但我在从这个 While 循环中提取我的变量以便使用我的 SQL 查询的结果时遇到了一些问题用于验证。
下面的脚本是 .aspx 表单上登录按钮的事件处理,处理将列在相关 MSSQL 数据库中的电子邮件和登录字段:
Public Class _Default
Inherits System.Web.UI.Page
Protected Sub submit_Click(sender As Object, e As EventArgs) Handles submit.Click
Dim Column1 As String
Dim Column2 As String
Dim SQL = "SELECT * FROM Logins WHERE Email='" & email.Text & "' AND Password='" & password.Text & "'"
Dim oSqlDataReader As System.Data.SqlClient.SqlDataReader = Nothing
Using oSqlConnection As New System.Data.SqlClient.SqlConnection("SERVER=[Server Name];UID=[User];PWD=[Pass];DATABASE=[Database Name]")
oSqlConnection.Open()
Using oSqlCommand As New System.Data.SqlClient.SqlCommand(SQL, oSqlConnection)
oSqlDataReader = oSqlCommand.ExecuteReader
While oSqlDataReader.Read
Column1 = oSqlDataReader(name:="Email")
Column2 = oSqlDataReader(name:="Password")
End While
End Using
oSqlConnection.Close()
End Using
If "Column 1 etc."
End if
End Sub
End Class
据我所知,我的代码没有任何错误,但每次我尝试创建 If 语句时,我的变量 Column 1 and Column 2
都未声明,因此无法使用。
如果有人可以帮助我的代码或遗漏区域进行正确的布局,并解释我哪里出错了,那就太好了。
如果在循环内移动 If
块,是否会更接近您期望的行为?
Protected Sub submit_Click(sender As Object, e As EventArgs) Handles submit.Click
Dim Column1 As String
Dim Column2 As String
Dim SQL = "SELECT * FROM Logins WHERE Email='" & email.Text & "' AND Password='" & password.Text & "'"
Dim oSqlDataReader As System.Data.SqlClient.SqlDataReader = Nothing
Using oSqlConnection As New System.Data.SqlClient.SqlConnection("SERVER=[Server Name];UID=[User];PWD=[Pass];DATABASE=[Database Name]")
oSqlConnection.Open()
Using oSqlCommand As New System.Data.SqlClient.SqlCommand(SQL, oSqlConnection)
oSqlDataReader = oSqlCommand.ExecuteReader
While oSqlDataReader.Read
Column1 = oSqlDataReader(name:="Email")
Column2 = oSqlDataReader(name:="Password")
If "Column 1 etc....."
End if
End While
End Using
oSqlConnection.Close()
End Using
End Sub
可能是您的查询没有返回任何行,或者返回的值为 dbNull 或什么都没有。如果合适,我会检查返回的数据和错误。
尝试运行 直接对数据库进行查询。你回来了吗?
为避免错误,您可以将字符串声明为 String.empty
Dim Column1 As String = String.empty
或者,在 if 语句中使用它时不检查任何内容:
If Column1 Is Not Nothing AndAlso ...
不要使用字符串连接来构建您的 sql 查询。而是使用 sql 参数来防止 sql 注入和其他问题。
我必须承认我不知道这个语法:oSqlDataReader(name:="Email")
。使用以下内容:
Dim email As String
Dim password As String
Dim sql = "SELECT * FROM Logins WHERE Email=@Email AND Password=@Password"
Using oSqlConnection As New System.Data.SqlClient.SqlConnection("SERVER=[Server Name];UID=[User];PWD=[Pass];DATABASE=[Database Name]")
Using oSqlCommand As New System.Data.SqlClient.SqlCommand(sql, oSqlConnection)
oSqlCommand.Parameters.Add("@Email", SqlDbType.VarChar).Value = email.Text
oSqlCommand.Parameters.Add("@Password", SqlDbType.VarChar).Value = password.Text
oSqlConnection.Open()
Using oSqlDataReader = oSqlCommand.ExecuteReader()
If oSqlDataReader.Read() Then
Dim emailColIndex = oSqlDataReader.GetOrdinal("Email")
Dim pwdColIndex = oSqlDataReader.GetOrdinal("Password")
email = oSqlDataReader.GetString(emailColIndex)
password = oSqlDataReader.GetString(pwdColIndex)
End If
End Using
End Using
End Using ' oSqlConnection.Close() not needed with using '
If email IsNot Nothing AndAlso password IsNot Nothing Then
End If
但是,您不应初始化两个字符串变量,而应实现可以初始化的 Login
class 和 return 方法。您不想知道电子邮件和密码,因为您已经有了它们。
由于这是 ASP.NET,我建议查看可用的 membership provider,它们功能强大且具有学习曲线,但绝对值得花时间。