当我尝试在字符串查询的帮助下从oracle数据库中提取行时出现问题。 如果我尝试按正常字符搜索行,我的查询工作,如果我尝试更改中文字符,我的查询没有找到任何行。
conn.Open()
cmd.Connection = conn
cmd.CommandText = "select DIRNAME from PROJECTINFO where UPPER(NAME) = UPPER('" + projFullName + "')"
cmd.CommandType = CommandType.Text
dr = cmd.ExecuteReader()
If dr.Read() Then
strProjRawDataSharePath = dr.Item("DIRNAME")
Else
dr.Close()
dr.Dispose()
End If
dr.Close()
dr.Dispose()
如果我使用“默认”(projFullName =“Defaults”)从查询中搜索我的“projFullName”,我的查询工作表示,如果我用projFullName =“中文版测试”更改,我的查询不会返回任何值,虽然,在我的数据库中,我有一个名为projFullName =“中文版测试”的项目。
答案 0 :(得分:0)
您可能需要考虑使用NLS_UPPER而不是UPPER。
NLS_UPPER知道特定于语言的规则等,而UPPER仅适用于“英语”字符,而(IRC)会将这些字符转换为英文字符。
运行以下查询会并排显示数据,并可能会突出显示该问题。
select UPPER(Input.ChineseText), NLS_UPPER(Input.ChineseText)
from (select '中文版测试' as ChineseText from dual) Input;
或者,如果需要UPPER,可能值得考虑 - 使用UPPER意味着在查询执行中不使用任何索引 - 但这不是这个问题的主题。
答案 1 :(得分:0)
答案 2 :(得分:0)
I'd do that:
'" + projFullName + "'
" + 'projFullName' + "
"select DIRNAME from PROJECTINFO where UPPER(NAME) = UPPER(+'中文版测试'+)"
Test this without defining, directly into code, as Quotation marks in VB code seem to be incorrect in there, they would end Oracle SQL Query.
答案 3 :(得分:0)
select UTL_I18N.RAW_TO_NCHAR(UTL_I18N.STRING_TO_RAW(NAME), 'ZHS16CGB231280') As NAME, UTL_I18N.RAW_TO_NCHAR(UTL_I18N.STRING_TO_RAW(DIRNAME), 'ZHS16CGB231280') As DIR FROM PROJECS"
此查询帮助我将de condification从oracle转换为中文字符