执行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()