sql-server - 为什么这个 SQL 搜索会给出这个不兼容错误?
问题描述
尝试使用 SQL 搜索特定名称时,我的项目中出现此错误。当我在文本框中输入名称并搜索时。
这是使用的代码:
da = New SqlDataAdapter("select * From MovTable where NameOfMov = '" & NameSearchTB.Text & "'", sqlcon)
da.Fill(MovieSearchdt)
MovTable 是 SQLDataTable NameOfMov 是我正在搜索的列。
这是尝试搜索后出现的错误:
System.Data.SqlClient.SqlException:'数据类型 ntext 和 varchar 在等于运算符中不兼容。'
解决方案
如果您无法按照 Anonymous 在他的回答中的建议修复数据库中字段的数据类型,那么使用参数可能会起作用。
您应该始终使用参数来避免 Sql 注入。
Private Function GetMovieData(NameToSearch As String) As DataTable
Dim dt As New DataTable
Using cn As New SqlConnection("Your connection string"),
cmd As New SqlCommand("select * From MovTable where NameOfMov = @Name;", cn)
cmd.Parameters.Add("@Name", SqlDbType.NText).Value = NameToSearch
cn.Open()
dt.Load(cmd.ExecuteReader)
End Using
Return dt
End Function
用法:
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim dt = GetMovieData(NameSearchTB.Text)
DataGridView1.DataSource = dt
End Sub
这将用户界面代码与数据访问代码分开。该按钮对数据的来源一无所知,GetMovieDate 不关心数据的使用方式或使用地点。
推荐阅读
- java - Java swing JTextArea & JScrollPane,垂直滚动有效但水平滚动无效,一行向下
- javascript - 如何在 react-native 中对 SectionList 进行分页
- python - 将每日数据重采样为工作日数据
- reactjs - 当页面首次加载时,如何在输入中使用占位符文本而不是值(今天的日期)?
- javascript - ShellJs 执行 CLI 命令
- java - 复制在模拟器上工作但在安卓设备上不工作的音频文件
- python - 在python中用lambda替换嵌套的'for循环'
- matlab - 如何在matlab中连接单词/短语
- video-streaming - 如果上传的文件是 *.avi 或 *.flv 类型,如何在 JavaScript 中获取 *.avi *.flv、*.rmvb 文件的持续时间?
- python - 双标量中遇到溢出错误