首页 > 解决方案 > vb.net,sql命令代码中的数据类型不兼容

问题描述

我正在尝试在 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)                                                    

标签: sql-servervb.net

解决方案


在您的数据库中,您已将用户名或密码声明为text,这是不合适的,在这种情况下也会导致问题,因为您无法将值与text.

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

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

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


推荐阅读