c#查询oracle表(US7ASCII字符集)时汉字出现乱码?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c#查询oracle表(US7ASCII字符集)时汉字出现乱码?相关的知识,希望对你有一定的参考价值。
c#中的代码如下:
protected void Button1_Click(object sender, EventArgs e)
string oradb = "Data Source=(DESCRIPTION=(ADDRESS_LIST="
+ "(ADDRESS=(PROTOCOL=TCP)(HOST=17.11.10.48)(PORT=1521)))"
+ "(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=data)));"
+ "User Id=cx;Password=123456;";
OracleConnection conn = new OracleConnection(oradb); // C#
conn.Open();
OracleCommand cmd = new OracleCommand();
cmd.Connection = conn;
cmd.CommandText = "select nsrmc from dj_nsrxx where nsrsbh = " + "'" + TextBox1.Text.ToString() + "'";
cmd.CommandType = System.Data.CommandType.Text;
OracleDataReader dr = cmd.ExecuteReader();
if (dr.Read()) // C#
Label2.Text = dr["nsrmc"].ToString();
//Label2.Text = dr["nsrmc"].ToString();
else
Label2.Text = "未找到记录";
结果显示为乱码,请高人解决!
服务器端的oracle表为US7ASCII字符集,不可更改。
客户端的注册表信息已改,但没用,还是乱码。
select
t1.value||'_'||t2.VALUE||'.'||t3.VALUE AS Server
FROM nls_database_parameters t1,nls_database_parameters t2,nls_database_parameters t3
WHERE t1.PARAMETER='NLS_LANGUAGE'
AND t2.PARAMETER='NLS_TERRITORY'
AND t3.PARAMETER='NLS_CHARACTERSET' 参考技术A 修改Oracle客户端语言:
HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraClient11g_home1下的NLS_LANG为SIMPLIFIED CHINESE_CHINA.ZHS16GBK
SIMPLIFIED CHINESE_CHINA.ZHS16GBK 为你的 US7ASCII追问
客户端的注册表信息已改,但没用,还是乱码。
追答直接在 代码中 执行 一个命令 :set NLS_LANG = .... 看看是否可行 ?
追问在c#中直接用set?没用过,好像不行吧?
追答试过吗,不试怎么知道是否可行 ?
cmd.CommandText="set NLS_LANG = .... “;
....
用 PL/SQL 或者 SQL PLUS 查询的结果,中文显示是正常的。
参考技术C 有可能是你存储格式的问题:你的汉字的存储格式是varchar吗?改成nvarchar试试。 参考技术D 你的客户端是oracle的不一致 应该比较困难解决的从 C# 调用 oracle 函数
【中文标题】从 C# 调用 oracle 函数【英文标题】:Calling an oracle function from C# 【发布时间】:2009-08-27 07:52:11 【问题描述】:我有一个 Oracle 函数 GetEmployeeDetails,它将所有员工详细信息保存到一个临时表 TempEmployeeDetails 表中。
我必须调用函数,然后对临时表进行选择查询。函数调用成功,但选择查询抛出以下错误。
"开始:输出:= MyPackage.GetEmployeeDetails(" + ":EmployeeId,");选择 * 从 TempEmployeeDetails;结束;"
上面的查询给了我这个错误:
ORA-06550:第 1 行,第 98 列:
PLS-00428:此 SELECT 语句中应有一个 INTO 子句
【问题讨论】:
【参考方案1】:如果您使用的是 OracleClient,我认为您应该将查询与函数调用分开,因此代码可能是:
OracleCommand cmd = new OracleCommand("GetEmployeeDetails", conn);
cmd.CommandType = CommandType.StoredProcedure;
par = new OracleParameter("EmployeeId", OracleType.int32);
par.Value = EmployeeId;
par.Direction = ParameterDirection.Input;
cmd.Parameters.Add(par);
cmd.ExecuteNonQuery();
现在要从 tempEmployeeDetails 获取数据,请进行如下查询:
OracleCommand cmd = new OracleCommand("SELECT * FROM TempEmployeeDetails", conn);
OracleDataReader dr = cmd.ExecuteReader();
while (dr.Read())
//do what you want...
【讨论】:
以上是关于c#查询oracle表(US7ASCII字符集)时汉字出现乱码?的主要内容,如果未能解决你的问题,请参考以下文章
oracle 11g 没有US7ASCII字符集么?在选择字符集的时候要选择哪一呀?
thinkphp volist遍历oracle数据库时中文出现乱码
oracle用的AMERICAN_AMERICA.us7ascii字符集,但是数据库语句执行下来,中文为乱码。求答案
(Oracle) 在 Snowflake 中转换 us7ascii?
java 从oracl读取数据时候乱码了,原因之一就是数据库所使用的字符编码是merican_America.US7Ascii