vb.net中的数据类型不兼容,SQL命令代码

时间:2019-01-20 05:08:15

标签: sql-server vb.net

我正在尝试为vb.net中的sql数据库创建一个登录表单。执行程序时,出现此错误:

  

数据类型文本和与运算符

不兼容的文本

我的代码:

Dim connection As New SqlConnection("Server= DESKTOP-56RQL1O\SQLEXPRESS; Database = student;user=tulsi;password=tulsi123;Integrated Security=true")
Dim command As New SqlCommand("select * from student_table where Username = @username and Password = @password", connection)

command.Parameters.Add("@username", SqlDbType.Text).Value = UsernameTextBox.Text
command.Parameters.Add("@password", SqlDbType.Text).Value = PasswordTextBox.Text

Dim adapter As New SqlDataAdapter(command)

Dim table As New DataTable()

adapter.Fill(table)

If table.Rows.Count() <= 0 Then

    MessageBox.Show("Username Or Password Are Invalid")

Else

    MessageBox.Show("Login Successfully")

    Me.Hide()
    user_profile.Show()

End If

此代码行上发生错误:

adapter.Fill(table)                                                    

2 个答案:

答案 0 :(得分:0)

听起来您的UsernamePassword列属于text类型,无法比较。

已经淘汰了SQL Server中的text类型,而推荐使用nvarchar。将列更改为nvarchar(x)(其中x是您计划支持的最大长度),您的比较就可以了。

答案 1 :(得分:0)

在数据库中,您已将用户名或密码声明为text,这是不合适的,并且在这种情况下也会引起问题,因为您无法将值与text进行比较。

更合适的声明是密码nvarchar(256)。如果用户名将存储电子邮件地址或自动生成的用户名,则我将输入varchar(256),否则将输入nvarchar(256)

您不想在此处使用text的另一个原因是,您无法在它们上创建索引。并且您需要在用户名上建立索引,以便快速验证登录尝试。

最后一件事,考虑在表中将密码声明为nvarchar(512) collate Latin1_General_BIN,然后在命令中将其与Password = @password collate Latin1_General_BIN进行比较。这样,无论数据库设置如何(默认情况下不区分大小写),都可以确保区分大小写和区分重音的密码进行比较。