OLEDB 连接ORACL数据库异常:在本地计算机上注册“OraOLEDB.Oracle”提供程序

c2503912 2016-02-01 04:35:18

string connstr = "Provider=OraOLEDB.Oracle;Server=localhost;Data Source=(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME = orcl)));User ID=sczl;Password=123;";
OleDbConnection conn = new OleDbConnection(connstr);
conn.Open();
string test_sql = "select 1 from dual";
try
{
OleDbCommand cmd = new OleDbCommand(test_sql,conn);
cmd.ExecuteNonQuery();
}
catch (Exception ex)
{
throw;
}
finally
{
conn.Close();
}

本地装的是oracle 11g R2,按服务器配置装的。PLSQL,以及sqlplus都能正常连接。网上什么设置权限,注册都试过都不能解决
...全文
187 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
qbilbo 2016-02-03
  • 打赏
  • 举报
回复
那就是OLEDB驱动的平台与你项目的目标平台不一致。 把项目平台改成X86,或64分别试一下。 如果为了以后发布一定要ANYCPU的话,把首选32位的勾去掉。
c2503912 2016-02-03
  • 打赏
  • 举报
回复
引用 10 楼 qbilbo 的回复:
打开注册表编辑器,在:HKEY_CLASSES_ROOT\CLSID下查找:OraOLEDB.Oracle,看看能不能找到。
能够找到
c2503912 2016-02-03
  • 打赏
  • 举报
回复
我的问题解决,原来是驱动的平台不一致导致的; 因为做的程序要连接 access所以要用Microsoft.Jet.OLEDB.4.0服务,但是Microsoft.Jet.OLEDB.4.0只有X86平台的所以我输出改成X86,但是自己的ORACLE是x64。谢谢 @qbilbo
qbilbo 2016-02-02
  • 打赏
  • 举报
回复
那个是ActiveX Dll,不是靠Path路径来查找的,需要用regsvr32 注册。
c2503912 2016-02-02
  • 打赏
  • 举报
回复
OraOLEDBXX.dll 在ORACLE_HOME的BIN文件下可以找到,不会被引用? 难道必须要客户端里的吗?
qbilbo 2016-02-02
  • 打赏
  • 举报
回复
你的连接字符串写的是:Provider=OraOLEDB.Oracle. OLEDB不仅仅只是For Jet引擎。你连Oracle当然是For Oracle的OLEDB驱动。 去Oralce官网下个Instant Client,里面有OleDB驱动。可能需要用regsvr32手工注册了下:OraOLEDBXX.dll
c2503912 2016-02-02
  • 打赏
  • 举报
回复
引用 3 楼 qbilbo 的回复:
报错很明显啊,没有OLEDB驱动。SQLPLUS能连接是国为它们不是用OLEDB驱动连接ORACLE的.
如果是没驱动的话是报 ”未在本地计算机上注册 Microsoft.Jet.OLEDB.4.0“异常吧。我连接ACCESS是没问题的,所以不是驱动未安装
qbilbo 2016-02-02
  • 打赏
  • 举报
回复
报错很明显啊,没有OLEDB驱动。SQLPLUS能连接是国为它们不是用OLEDB驱动连接ORACLE的.
qbilbo 2016-02-02
  • 打赏
  • 举报
回复
打开注册表编辑器,在:HKEY_CLASSES_ROOT\CLSID下查找:OraOLEDB.Oracle,看看能不能找到。
  • 打赏
  • 举报
回复
如果是网站程序,有可能需要在webconfig里配置手动注册! 或者就是环境问题了!
c2503912 2016-02-02
  • 打赏
  • 举报
回复
regsvr32注册了还是不行
秋的红果实 2016-02-01
  • 打赏
  • 举报
回复
select后面应该是字段名列表,如select name,age,address from dual, 或者select * from dual,表示所有字段
秋的红果实 2016-02-01
  • 打赏
  • 举报
回复
string test_sql = "select 1 from dual"; 这语句也能执行?

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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