列存在时列名无效

时间:2016-04-17 08:48:44

标签: sql-server vb.net

我正在尝试使用MDI创建一个登录窗口。它连接到SQL Server表test。我更改了数据类型并删除并重新创建了数据库。我有2列:数据类型usr的{​​{1}}和pwd

nvarchar

非常感谢你。

2 个答案:

答案 0 :(得分:1)

如果您使用Tortuga.Chain,代码将如下所示:

Dim ds As New SqlServerDataSource(connetionString)

Dim user = ds.From("users", new With {.usr = TextBox1.Text, .pwd = TextBox2.Text}).ToString.Execute();

If user Is Not Nothing Then
Else
    MessageBox.Show("Incorrect username/password !", "LOGIN ERROR", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
End If

如果您想坚持使用原始ADO.NET代码,则需要使用参数化查询。

Dim connetionString As String
Dim cnn As SqlConnection

connetionString = "Data Source=.;Initial Catalog=test;User ID=sa;Password=sasql"
cnn = New SqlConnection(connetionString)

Dim cmd As SqlCommand
Dim myreader As SqlDataReader
Dim query As String

query = "Select usr From users WHERE (usr = @user and pwd = @pwd )"
cmd = New SqlCommand(query, cnn)
cmd.Parameters.AddWithValue( "@usr", TextBox1.Text)
cmd.Parameters.AddWithValue( "@pwd", TextBox2.Text)

cnn.Open()
myreader = cmd.ExecuteReader()

If myreader.Read() Then
Else
    MessageBox.Show("Incorrect username/password !", "LOGIN ERROR", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
End If

cnn.Close()

答案 1 :(得分:0)

connectionString的值中删除空格。

您的查询会比较文本数据,除非用户在文本框的开头和结尾输入',否则该文本数据无效。这在语法上是正确的:

"Select usr From users WHERE (usr ='" + TextBox1.Text + "' and pwd = '" + TextBox2.Text + "')"

但在逻辑上存在缺陷,因为用户可能会尝试将恶意SQL注入您的文本框中。您的申请非常不安全。您必须protect it against SQL injection并且还需要encrypt the password用户。