读书人

SQL执行含有中文字符的查询时有有关问

发布时间: 2013-09-06 10:17:17 作者: rapoo

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 也是一致的。

读书人网 >VB Dotnet

热点推荐