执行vb.net查询时面临的问题

执行vb.net查询时面临的问题,vb.net,Vb.net,您需要在查询中使用参数: Dim con As SqlConnection con = New SqlConnection("server=chinna; uid=sa; pwd=136018@h; database=icms") con.Open() Dim cmd As SqlCommand cmd = New SqlCommand("select pass from personal where idno=" & Te

您需要在查询中使用参数:

Dim con As SqlConnection
        con = New SqlConnection("server=chinna; uid=sa; pwd=136018@h; database=icms")
        con.Open()
        Dim cmd As SqlCommand
        cmd = New SqlCommand("select pass from personal where idno=" & TextBox1.Text, con)
        cmd.CommandType = CommandType.Text
        Dim rdr As SqlDataReader
        rdr = cmd.ExecuteReader
        If rdr.Read() Then

            TextBox2.Text = rdr.ToString()
            Response.Redirect("default.aspx")
        Else
            MsgBox("incorrect password")
应该是

cmd = New SqlCommand("select pass from personal where idno=@param", con)
cmd.Parameters.AddWithValue("param", TextBox1.Text);

除此之外,ASP.net的代码似乎更重要。我们无法在VB.net中执行可以显示在客户端浏览器上的MsgBox。

您缺少数据源分配

在调用DataBind之前添加GridView1.DataSource=rdr

您的If块应该如下所示:

cmd = New SqlCommand("select pass from personal where idno='" & TextBox1.Text & "'", con)
在rdr上使用HasRows并为GridView1设置数据源

If rdr.Read() Then  
 GridView1.Visible = True             
 GridView1.DataSource = rdr
 GridView1.DataBind()           
End If 
使用而不是ExecuteReader


仅供参考,将密码存储在纯文本中并进行这样的比较是非常糟糕的做法。您应该使用单向salt加密对密码进行加密,然后在验证时执行相同的操作,然后比较加密值。

您的错误是什么,或者您只是得到了rdr的空值

我没有看到输出参数。你需要一个。您只有一个输入参数

您需要使用会话变量或登录标识以某种方式标记用户已登录。否则,任何人只要直接导航到该页面,就可以进入该页面的登录版本。 MsgBox在asp.net中无效,因为它将在服务器上而不是客户端上显示消息。尝试使用页面上的标签通过设置其文本来显示错误消息。 你有什么问题?它就是不起作用吗?它没有正确验证您的密码吗?你有什么例外吗?你能公布结果吗?
您有SQL注入漏洞。您面临哪些问题?你提供的信息很少,虽然你已经发现了一些错误,但是更多的信息并不是坏事。你应该命名你的文本框。不要用纯文本存储密码!我也会删除你的用户名和密码,我已经这样做了,但这将永远在这一编辑的历史中:加入引号将使其工作,但留下SQL注入攻击漏洞。如果文本框中的文本包含一个',那么您可能会遇到真正的麻烦,即文本测试';吊床个人;GO'获取SELECT查询的结果不需要输出参数。查询的结果就是输出。是的,但是您应该在读取过程中进行迭代,而不仅仅是将其转储到字符串中。+1用于坚持答案,并且只在以后评论OMG非常糟糕的编码实践。
    Dim rdr As SqlDataReader
    rdr = cmd.ExecuteReader()
    If rdr.HasRows Then
        GridView1.Visible = True
        GridView1.DataSource = rdr
        GridView1.DataBind()
    End If
Dim password As String
password = cmd.ExecuteScalar.ToString()