C#连接远程oracles数据库 中文做条件查询不到数据

夜_麒麟 2017-07-02 05:56:32
客户端环境 windows7 32
本机注册表字符集
AMERICAN_AMERICA.US7ASCII
客户端 环境变量字符集 AMERICAN_AMERICA.US7ASCII

远程oracle 服务端 通过本地plsql 查询出 字符集为AMERICAN_AMERICA.US7ASCII


那么问题来了 本机通过PLSQL 连接远程数据库 查询如:
select * from temp where name='中国' 是可以查询到数据的
通过C# 程序就查询不到数据了
下面附上 代码

string conn = "Provider=OraOLEDB.Oracle;Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=服务器地址)(PORT=1521)))(CONNECT_DATA=(SID=ORCL)(SERVER=DEDICATED)));User Id=oracle;Password=oracle;Persist Security Info=True;Unicode=True;";
string sql =string.Format("select * from temp where name='中国' ");
using (OleDbDataAdapter da = new OleDbDataAdapter(SQL, conn))
{

try
{
DataSet ds = new DataSet();
da.Fill(ds);
dataGridView1.DataSource = ds.Tables[0];
}
catch (OleDbException exp)
{

da.Dispose();
throw new Exception(exp.Message);
}
}
...全文
755 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
sxq129601 2017-07-05
  • 打赏
  • 举报
回复
temp 这个表是临时表还是实体表
  • 打赏
  • 举报
回复
引用 楼主 u010786338 的回复:
客户端环境 windows7 32 本机注册表字符集 AMERICAN_AMERICA.US7ASCII 客户端 环境变量字符集 AMERICAN_AMERICA.US7ASCII 远程oracle 服务端 通过本地plsql 查询出 字符集为AMERICAN_AMERICA.US7ASCII 那么问题来了 本机通过PLSQL 连接远程数据库 查询如: select * from temp where name='中国' 是可以查询到数据的 通过C# 程序就查询不到数据了 下面附上 代码 string conn = "Provider=OraOLEDB.Oracle;Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=服务器地址)(PORT=1521)))(CONNECT_DATA=(SID=ORCL)(SERVER=DEDICATED)));User Id=oracle;Password=oracle;Persist Security Info=True;Unicode=True;"; string sql =string.Format("select * from temp where name='中国' "); using (OleDbDataAdapter da = new OleDbDataAdapter(SQL, conn)) { try { DataSet ds = new DataSet(); da.Fill(ds); dataGridView1.DataSource = ds.Tables[0]; } catch (OleDbException exp) { da.Dispose(); throw new Exception(exp.Message); } }
链接字符串有问题吧
夜_麒麟 2017-07-03
  • 打赏
  • 举报
回复
必须是一个库 因为我只有这么一个库的权限
夜_麒麟 2017-07-03
  • 打赏
  • 举报
回复
是一个库的 我用编号就可以查到那条数据用汉字就查询不到 还有你说的 字符集 目前都已经一样 我查询的数据也可以正常显示 但是用中文做条件就不可以 代码插曲oracle库汉字会是?号 数字就没有问题
夜_麒麟 2017-07-03
  • 打赏
  • 举报
回复
引用 11 楼 wzf_soft 的回复:
string sql =string.Format("select * from temp where name='中国' "); -//变量 sql 小写 using (OleDbDataAdapter da = new OleDbDataAdapter(SQL, conn)) //SQL 大写 这样没有报错??
重点不在这个 重点是 查不到数据 sql 语句是我后粘的 原本应该是sql 不报错的
jdsnhan 2017-07-03
  • 打赏
  • 举报
回复
谁知道你连接的库是不是一个啊。 搞个测试, 你把temp中的内容改一下,把中国改成china,然后在plsql和 程序中分别访问。 如果两处都能访问到,那说明字符集是有问题的,重点找字符集的问题。 如果c#程序还没有数据,那或许访问的不是一个库,或许还有其他的问题
wzf_soft 2017-07-03
  • 打赏
  • 举报
回复
string sql =string.Format("select * from temp where name='中国' "); -//变量 sql 小写 using (OleDbDataAdapter da = new OleDbDataAdapter(SQL, conn)) //SQL 大写 这样没有报错??
qq_34745427 2017-07-03
  • 打赏
  • 举报
回复
上面都做了之后还不行,那就在看看服务器上有的服务端是多少位的,在看本地服务端是多少位的,不同的话先发布到iis中,看在iis中是否能正常运行
qq_34745427 2017-07-03
  • 打赏
  • 举报
回复
先第一不看在本地net manager中有没有要连接的服务,点中此服务先测试一下,没有的话先创建一个服务把,没有测试通过说明监听没开,或者根本链接不上就要找其他问题了。通过后在通过plsql看是否能连接,能连接后看c#连接字符串<add name="OraConnString" connectionString="Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=ip)(PORT=端口)))(CONNECT_DATA=(SERVER=服务)(SERVICE_NAME=服务名)));User Id=用户登录名;Password=用户密码;"/>
qq_34745427 2017-07-03
  • 打赏
  • 举报
回复
我感觉好解决
夜_麒麟 2017-07-03
  • 打赏
  • 举报
回复
顶帖啊
夜_麒麟 2017-07-02
  • 打赏
  • 举报
回复
急急急 在线坐等
夜_麒麟 2017-07-02
  • 打赏
  • 举报
回复
自顶一贴 oracleclinet 已经重装 选在字符集也是US7ASCII Oracle - OraHome92 Oracle Installation Products
夜_麒麟 2017-07-02
  • 打赏
  • 举报
回复
快来大神感觉并不是单单字符集的问题

3,491

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧