执行vb.net查询时遇到问题

时间:2011-04-29 14:19:34

标签: 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=" & 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")

7 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:3)

使用ExecuteScalar代替ExecuteReader

Dim password As String
password = cmd.ExecuteScalar.ToString()

仅供参考,以纯文本格式存储密码并进行比较是非常糟糕的做法。您应该使用某种单向加密加密来加密密码,然后在验证时执行相同的操作,然后比较加密值。

答案 2 :(得分:1)

您缺少DataSource分配。

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

您的If块应如下所示:

If rdr.Read() Then  
 GridView1.Visible = True             
 GridView1.DataSource = rdr
 GridView1.DataBind()           
End If 

答案 3 :(得分:0)

应该是

cmd = New SqlCommand("select pass from personal where idno='" & TextBox1.Text & "'", con)

超出该代码似乎是ASP.net。我们无法在VB.net中执行可以出现在客户端浏览器上的MsgBox。

答案 4 :(得分:0)

在rdr上使用HasRows并为GridView1设置DataSource

    Dim rdr As SqlDataReader
    rdr = cmd.ExecuteReader()
    If rdr.HasRows Then
        GridView1.Visible = True
        GridView1.DataSource = rdr
        GridView1.DataBind()
    End If

答案 5 :(得分:0)

您的错误是什么,或者您只是为rdr获取null?

我没有看到一个outpout参数。您必须有一个。您只有一个输入参数。

答案 6 :(得分:0)

  1. 您需要使用Session变量或登录标识以某种方式标记用户已登录。否则,任何人都可以直接导航到该页面的登录版本。
  2. MsgBox(在asp.net中无效,因为它会在服务器上显示消息,而不是在客户端上显示消息。尝试使用页面上的Label通过设置文本来显示错误消息。
  3. 你遇到的问题是什么?它只是“不工作”吗?它没有正确验证您的密码吗?你有某种例外吗?你能发表结果吗?