sql-server - 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)
解决方案
在您的数据库中,您已将用户名或密码声明为text
,这是不合适的,在这种情况下也会导致问题,因为您无法将值与text
.
更合适的声明将是nvarchar(256)
密码。如果用户名将存储电子邮件地址或自动生成的用户名,我会选择varchar(256)
,否则选择nvarchar(256)
.
您不想在text
此处使用的另一个原因是您无法在它们上创建索引。并且您需要用户名索引以快速验证登录尝试。
最后一件事,考虑nvarchar(512) collate Latin1_General_BIN
在表中声明密码,并在您的命令中将其与Password = @password collate Latin1_General_BIN
. 这样,无论您的数据库设置如何(默认情况下不区分大小写),您都可以确保获得区分大小写和区分重音的密码比较。
推荐阅读
- java - 添加超链接到内部 PDF 文件
- c++ - 是否可以直接在 Windows 上创建针对 dll 的 CMake 链接?
- node.js - Selenium WebDriver - 未定义的下拉菜单
- spi - 连接 AXI Quad SPI 和 AXI4 数据流 FIFO
- python - 如何在 __init__.py 中导入代码
- python-3.x - 从同一类的方法调用时我不想调用装饰器函数
- python - 保存 Keras 模型并将其重用于迁移学习
- javascript - 不推荐使用 event.keyCode,使用 .key 返回 null
- reactjs - 是否可以将带有 React 和 MobX 的简单应用程序放在一个 html 页面中?
- python - 将带有逗号和负值的数字字符串转换为浮点数 [Pandas]