首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > VB Dotnet >

SQL执行含有中文字符的查询时有有关问题,结果为空,求解

2013-09-06 
SQL执行含有中文字符的查询时有问题,结果为空,求解vb2012连接sql server数据库文件,数据表名称为Data,有以

SQL执行含有中文字符的查询时有问题,结果为空,求解
vb2012连接sql server数据库文件,数据表名称为Data,有以下几条记录:
ID    Title_CH    Title_EN
10    白宫陷落     Olympus Has Fallen
9     钢铁侠III    Iron Man 3
查询语句是这样的:


Public Class frmQuery
    Dim cn As SqlConnection
    Dim da As SqlDataAdapter
    Dim ds As DataSet
    Dim strSQLCommand As String
    Dim strQuerySQLCommand As String

    Private Sub btnQuery_Click(sender As Object, e As EventArgs) Handles btnQuery.Click
        
        
        '数据库连接
        cn = New SqlConnection
        cn.ConnectionString = "Server=(localdb)\v11.0;AttachDbFilename=|DataDirectory|DATABASE.mdf;Trusted_Connection=Yes"
        
        
        'SQL查询语句
        strQuerySQLCommand = "SELECT Data.ID AS 编号, Title_EN AS 外文名称, Title_CH AS 中文名称"
        strQuerySQLCommand += " FROM Data WHERE Data.ID=Data.ID"
        If chkTitle_EN.Checked = True Then
            strQuerySQLCommand += " AND Data.Title_EN LIKE '%" & txtSearchTitle_EN.Text & "%'"
        End If
        If chkTitle_CH.Checked = True Then
            strQuerySQLCommand += " AND Data.Title_CH LIKE '%" & txtSearchTitle_CH.Text & "%'"
        End If

        Try
            cn.Open()
            Dim cd As New SqlCommand(strQuerySQLCommand, cn)
            Dim drd As SqlDataReader


            drd = cd.ExecuteReader()
            Dim dt As DataTable = New DataTable
            dt.Load(drd)
            
            'DataGridView填充
            dgvResult.DataSource = dt
            cn.Close()
         Catch
            MsgBox("查询出错", vbCritical, "警告")
         End Try
    End Sub



出现的问题是,当查询条件也就是txtSearchTitle_CH.Text中出现了中文的时候比如说“白”,LIKE的查询结果应当是白宫陷落,但实际上却是空,DataGridView为空,不知是何原因,查询英文的时候就没问题比如说查询"III",查询出来就是“钢铁侠III”,求指点,求解答,谢谢啦! sql 数据库 datagridview
[解决办法]
1:断点查看 strQuerySQLCommand得到sql 输入分析器查询下看看有没有结果
没有仔细检查代码
2:
dgvResult.DataSource = dt
dgvResult.DataBind();少了绑定吧
[解决办法]
SELECT Data.ID AS 编号, Title_EN AS 外文名称, Title_CH AS 中文名称 FROM Data WHERE Data.ID=Data.ID AND Data.Title_CH LIKE '%白%'

你输入SQL里面查询下有没有数据呀。
[解决办法]
quote=引用:]
字段 Title_CH 应该用 NVarchar 类型、语言应该为中文。

引用:
是不是数据库编码是什么??


或者在中文匹配的时候加上个N试试
 " AND Data.Title_EN LIKE N'%" & txtSearchTitle_EN.Text & "%'"
[解决办法]
NVarchar 字段类型就应该用 Unicode 字符串进行匹配,前缀 N 就表示 Unicode 字符串。
这是配对的。否则就会先进行 Unicode 转 Ansi 后再进行匹配。



又:你的字符串没加 N 前缀,我就认为字段是 Varchar 的。其实是你的 SQL 和字段类型不匹配。
又:你的客户端和数据库的语言不一致吧,否则就算转 Ansi 也是一致的。

热点排行