Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net asp登录SQL的帮助_Asp.net_Sql_Login_Get - Fatal编程技术网

Asp.net asp登录SQL的帮助

Asp.net asp登录SQL的帮助,asp.net,sql,login,get,Asp.net,Sql,Login,Get,我有一个表单,提交时会转到下面的登录脚本 <% Dim myConnection As System.Data.SqlClient.SqlConnection Dim myCommand As System.Data.SqlClient.SqlCommand Dim requestName As String Dim requestPass As String requestName = Request.Form("userName") re

我有一个表单,提交时会转到下面的登录脚本

<%
    Dim myConnection As System.Data.SqlClient.SqlConnection
    Dim myCommand As System.Data.SqlClient.SqlCommand
    Dim requestName As String
    Dim requestPass As String
    requestName = Request.Form("userName")
    requestPass = Request.Form("userPass")
    Dim queryString As String = "SELECT COUNT(*) AS Num_Of_User FROM tblusers WHERE username='" & requestName & "' AND password='" & requestPass & "'"
    myConnection = New System.Data.SqlClient.SqlConnection("Data Source=(local);InitialCatalog=dbtest;Integrated Security=True")
    myCommand = New System.Data.SqlClient.SqlCommand(queryString, myConnection)
    myConnection.Open()
    Dim reader As System.Data.SqlClient.SqlDataReader = myCommand.ExecuteReader()
%>


现在理论上,我应该能够从SQL查询中获得用户的Num_,如果它等于1,那么登录就成功了。这是正确的方法吗?如何获取SQL返回的值?

请尝试
myCommand.ExecuteScalar()
,它从结果集第一行的第一列返回值,这正是您在这里要查找的值


另外,检查ASP.Net“内置”身份验证方法-这可能会节省您的一些工作。

请尝试myCommand.ExecuteScalar(),它返回结果集第一行第一列的值-正是您在这里要查找的值


另外,检查ASP.Net“内置”身份验证方法-这可能会节省您的一些工作。

您可以使用该代码进行SQL注入。

请参阅如果您以
或2>1的形式输入用户名--

您需要更改以使用参数化查询

Dim queryString As String = "SELECT COUNT(*) AS Num_Of_User FROM tblusers WHERE username=@username AND password=@password"
myConnection = New System.Data.SqlClient.SqlConnection("Data Source=(local);InitialCatalog=dbtest;Integrated Security=True")
myCommand = New System.Data.SqlClient.SqlCommand(queryString, myConnection)
myCommand.Parameters.AddWithValue("@username", requestName)
myCommand.Parameters.AddWithValue("@password", requestPass) 
您也不会处理任何可能抛出的异常,也不会处理对象。

您的代码应该更像下面的代码

Dim numUsers as Integer
Using myConnection as New System.Data.SqlClient.SqlConnection("Data Source=(local);InitialCatalog=dbtest;Integrated Security=True")
   Dim queryString As String = "SELECT COUNT(*) AS Num_Of_User FROM tblusers WHERE username=@username AND password=@password"
   Using myCommand as New System.Data.SqlClient.SqlCommand(queryString, myConnection)
      myConnection.Open
      myCommand.Parameters.AddWithValue("@username", requestName)
      myCommand.Parameters.AddWithValue("@password", requestPass) 
      numUsers = myCommand.ExecuteScalar()
   End Using
End Using 

上面的代码将确保您的对象被释放,但不会处理任何可能引发的异常

您完全可以使用该代码进行SQL注入。

请参阅如果您以
或2>1的形式输入用户名--

您需要更改以使用参数化查询

Dim queryString As String = "SELECT COUNT(*) AS Num_Of_User FROM tblusers WHERE username=@username AND password=@password"
myConnection = New System.Data.SqlClient.SqlConnection("Data Source=(local);InitialCatalog=dbtest;Integrated Security=True")
myCommand = New System.Data.SqlClient.SqlCommand(queryString, myConnection)
myCommand.Parameters.AddWithValue("@username", requestName)
myCommand.Parameters.AddWithValue("@password", requestPass) 
您也不会处理任何可能抛出的异常,也不会处理对象。

您的代码应该更像下面的代码

Dim numUsers as Integer
Using myConnection as New System.Data.SqlClient.SqlConnection("Data Source=(local);InitialCatalog=dbtest;Integrated Security=True")
   Dim queryString As String = "SELECT COUNT(*) AS Num_Of_User FROM tblusers WHERE username=@username AND password=@password"
   Using myCommand as New System.Data.SqlClient.SqlCommand(queryString, myConnection)
      myConnection.Open
      myCommand.Parameters.AddWithValue("@username", requestName)
      myCommand.Parameters.AddWithValue("@password", requestPass) 
      numUsers = myCommand.ExecuteScalar()
   End Using
End Using 

上面的代码将确保您的对象被释放,但不会处理任何可能引发的异常

您似乎正在使用ASP.NET,而不是ASP.NET。是吗?是的,它们都是.aspx页面您似乎在使用ASP.NET,而不是ASP.NET。是否正确?是的,它们都是。aspx pageso获取值是否正确:Dim rows rows=myCommand.ExecuteScalar()
Dim UserCount As Integer=DirectCast(myCommand.ExecuteScalar(),Integer)
这是使用该值的方法。那么获取值是否正确:Dim rows rows=myCommand.ExecuteScalar()
Dim UserCount As Integer=DirectCast(myCommand.ExecuteScalar(),Integer)
将使用此方法。我在第一行中遇到一个错误。它说:“BC3016:Variable‘myConnection’将变量隐藏在封闭块中。”“您不需要像SqlConnection一样使用
Dim myConnection
语句。
Using
语句声明变量,并在超出范围时对其进行处理,即在
End Using
之后。我在第一行Using中遇到一个错误。它说:“BC3016:Variable‘myConnection’将变量隐藏在封闭块中。”“您不需要像SqlConnection一样使用
Dim myConnection
语句。
Using
语句声明变量,并在超出范围时对其进行处理,即在
End Using
之后。