首页 > 解决方案 > 为什么这个 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 在等于运算符中不兼容。'

标签: sql-servervb.netsqlexception

解决方案


如果您无法按照 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 不关心数据的使用方式或使用地点。


推荐阅读