首页 新闻 会员 周边

.net + oracle 报错 ORA-12154: TNS:could not resolve the connect identifier specified

0
悬赏园豆:30 [已解决问题] 解决于 2015-02-06 16:35
同样的程序winform可以运行,webfrom就报这个错,还请大家指教。
火悬崖的主页 火悬崖 | 菜鸟二级 | 园豆:434
提问于:2015-02-06 13:50
< >
分享
最佳答案
0

oracle home 没有 IUSR_MachineName 权限

收获园豆:20
Yu | 专家六级 |园豆:12980 | 2015-02-06 14:37

是oracle的安装路径么,我试试看看。

火悬崖 | 园豆:434 (菜鸟二级) | 2015-02-06 14:42

怎么没看到有这个权限,能方便说下操作方法么?

火悬崖 | 园豆:434 (菜鸟二级) | 2015-02-06 14:43

@火悬崖: 你先把oracle home 的目录设置为everyone  full controls 试试

Yu | 园豆:12980 (专家六级) | 2015-02-06 14:50

@Yu: 是oracle的安装路径么,已经设置了,还是不行。

火悬崖 | 园豆:434 (菜鸟二级) | 2015-02-06 14:55

@火悬崖: 看看这个能不能

 

http://blog.csdn.net/huzia/article/details/21526043

Yu | 园豆:12980 (专家六级) | 2015-02-06 14:57

@Yu: TNS_ADMIN这个环境变量试过了,不行。oracle home是什么意思?ORACLE_HOME 环境变

量有什么用处的?

火悬崖 | 园豆:434 (菜鸟二级) | 2015-02-06 15:02

@火悬崖: 就是ORACLE_HOME 指向的路径

Yu | 园豆:12980 (专家六级) | 2015-02-06 15:05

@Yu: 专业名词还是不太懂,是安装路径么?

火悬崖 | 园豆:434 (菜鸟二级) | 2015-02-06 15:07

@火悬崖: 是的

Yu | 园豆:12980 (专家六级) | 2015-02-06 15:16

@Yu: 把连接字符串改成:User Id=test;Password=test;Data Source=127.0.0.1:1521/orcl;后报这个错误ORA-06413: Connection not open.是什么原因呢?

火悬崖 | 园豆:434 (菜鸟二级) | 2015-02-06 15:21

@火悬崖: conn.Open()这一行取消注释。在winform中先通过,再验证webform。

JeffWong | 园豆:2328 (老鸟四级) | 2015-02-06 15:27

@火悬崖: 所在目录是不能有括号的

Yu | 园豆:12980 (专家六级) | 2015-02-06 15:28

@JeffWong: 取消注释了,winform通过了,webform还是不行了。

火悬崖 | 园豆:434 (菜鸟二级) | 2015-02-06 15:32

@Yu: 程序的目录是没有括号的。

火悬崖 | 园豆:434 (菜鸟二级) | 2015-02-06 15:33

@火悬崖: 你的 PLSQL Developer 安装目录

Yu | 园豆:12980 (专家六级) | 2015-02-06 15:36

@Yu: 看了下,也没有括号。

火悬崖 | 园豆:434 (菜鸟二级) | 2015-02-06 15:41

@火悬崖: 你调成本地IIS来运行WEB

Yu | 园豆:12980 (专家六级) | 2015-02-06 15:46

@火悬崖: 你的vs是不是安装在 Program files(x86) 目录下?

Yu | 园豆:12980 (专家六级) | 2015-02-06 15:48

@Yu: 发布到iis上:错误如下:

[BadImageFormatException: 试图加载格式不正确的程序。 (Exception from HRESULT: 0x8007000B)] System.Data.Common.UnsafeNativeMethods.OCILobCopy2(IntPtr svchp, IntPtr errhp, IntPtr dst_locp, IntPtr src_locp, UInt64 amount, UInt64 dst_offset, UInt64 src_offset) +0 System.Data.OracleClient.OCI.DetermineClientVersion() +184 [InvalidOperationException: 尝试加载 Oracle 客户端库时引发 BadImageFormatException。如果在安装 32 位 Oracle 客户端组件的情况下以 64 位模式运行,将出现此问题。] System.Data.OracleClient.OCI.DetermineClientVersion() +421285

 

2.vs有一部分是默认安装在c盘的Program files(x86),这样会有问题么

火悬崖 | 园豆:434 (菜鸟二级) | 2015-02-06 15:58

@火悬崖: 把IIS 应用池 -高级设置的Enable 32-bit application 设置为true

Yu | 园豆:12980 (专家六级) | 2015-02-06 16:01

@Yu: 在IIS中可以运行了,谢谢你!但是在vs中运行还是那个错误,是什么原因呢?

火悬崖 | 园豆:434 (菜鸟二级) | 2015-02-06 16:08

@火悬崖: 重装

Yu | 园豆:12980 (专家六级) | 2015-02-06 16:10

@Yu: 重装?重装什么?是什么原因呢。

火悬崖 | 园豆:434 (菜鸟二级) | 2015-02-06 16:10

@火悬崖: 不支持括号的BUG

Yu | 园豆:12980 (专家六级) | 2015-02-06 16:11

@Yu: 这样只能重转操作系统了吧,不然vs还是有一部分是默认在c盘的Program files(x86)

火悬崖 | 园豆:434 (菜鸟二级) | 2015-02-06 16:12

@火悬崖: 重装VS可以了

Yu | 园豆:12980 (专家六级) | 2015-02-06 16:16

@Yu: 我装vs的时候,有一部分路径是不可选的,还是会在c盘的Program files(x86),怎么处理?为什么用IIS就可以正确运行呢?

火悬崖 | 园豆:434 (菜鸟二级) | 2015-02-06 16:18

@火悬崖: 或者想想咋么把 iis express 重装到Program files(x86) 之外

Yu | 园豆:12980 (专家六级) | 2015-02-06 16:22

@Yu: [BadImageFormatException: 试图加载格式不正确的程序。 (Exception from HRESULT: 0x8007000B)] System.Data.Common.UnsafeNativeMethods.OCILobCopy2(IntPtr svchp, IntPtr errhp, IntPtr dst_locp, IntPtr src_locp, UInt64 amount, UInt64 dst_offset, UInt64 src_offset) +0 System.Data.OracleClient.OCI.DetermineClientVersion() +184 [InvalidOperationException: 尝试加载 Oracle 客户端库时引发 BadImageFormatException。如果在安装 32 位 Oracle 客户端组件的情况下以 64 位模式运行,将出现此问题。] System.Data.OracleClient.OCI.DetermineClientVersion() +421285

 

 

报这个错是什么意思?

火悬崖 | 园豆:434 (菜鸟二级) | 2015-02-06 16:25

@火悬崖: 不是可以运行了吗

Yu | 园豆:12980 (专家六级) | 2015-02-06 16:26

@Yu: 想明白是什么原因,还请指教哈。

火悬崖 | 园豆:434 (菜鸟二级) | 2015-02-06 16:28

@火悬崖: 你的oracle是32位的,IIS必须支持32位运行

Yu | 园豆:12980 (专家六级) | 2015-02-06 16:29

@Yu: 这点明白了,但是好像又有更多的不明白了,以后有什么不明白的还望指教哈,谢谢!

火悬崖 | 园豆:434 (菜鸟二级) | 2015-02-06 16:33

@火悬崖: 嗷嗷嗷嗷嗷嗷 看懂了 还是oracle客户端的bug,在特定条件下才会发生bug,winform是不需要宿主的,而web需要iis

JeffWong | 园豆:2328 (老鸟四级) | 2015-02-06 16:47

@JeffWong: 谢谢你帮我找的资料,我还是不是太明白,以后有什么问题,继续指教哈。

火悬崖 | 园豆:434 (菜鸟二级) | 2015-02-06 17:24
其他回答(1)
0

请参考这里:http://blog.csdn.net/loadrunn/article/details/7895726

收获园豆:10
JeffWong | 园豆:2328 (老鸟四级) | 2015-02-06 13:56

谢谢,pl/sql可以连接上,winform也能操作oracle,就是webfrom报这个错。

支持(0) 反对(0) 火悬崖 | 园豆:434 (菜鸟二级) | 2015-02-06 13:59

@火悬崖: 还有一种可能是环境变量引发的 看这里:http://bbs.csdn.net/topics/390122437

这类问题通常都有共性,时灵时不灵,要么用错了,要么环境没配好。你可以顺便看一下webform下的数据库配置文件和winform下的配置是否有不同。

支持(0) 反对(0) JeffWong | 园豆:2328 (老鸟四级) | 2015-02-06 14:06

@JeffWong: 试了一下貌似也不行。因为我是想测试到底错在哪了,所以连接字符串之类的我都是写在程序中的,所以可以确定二个程序是一样的,我就搞不明白到底错在哪里了。

支持(0) 反对(0) 火悬崖 | 园豆:434 (菜鸟二级) | 2015-02-06 14:13

@火悬崖: 也就是winform和webform用到的数据访问是同一段代码了?oracle有端口访问限制吗?跟踪调试下试试吧?

支持(0) 反对(0) JeffWong | 园豆:2328 (老鸟四级) | 2015-02-06 14:16

@JeffWong: 是同一段代码,如下:

public DataTable  ConnectOracle()
        {
            using (OracleConnection conn = new OracleConnection("User Id=test;Password=test;Data Source=127.0.0.1/orcl;"))
            {
                //conn.Open();
                try
                {
                    OracleDataAdapter adapter = new OracleDataAdapter("select * from T_Student", conn);
                    DataTable dt = new DataTable();
                    adapter.Fill(dt);
                    return dt;
                }
                catch (Exception ex)
                {
                    throw;
                }
            }
        }

winform能运行成功,webform运行失败。

支持(0) 反对(0) 火悬崖 | 园豆:434 (菜鸟二级) | 2015-02-06 14:21

@火悬崖: conn.Open()这个应该是要的,必须显式打开sql连接。在catch处把异常调用堆栈log一下。或者你直接尝试一个简单的查询,类似select 1这种,然后OracleCommand.ExecuteScalar看一下。如果还是报相似的错误,将webform程序下的Oracle相关的dll重新引用一下。

支持(0) 反对(0) JeffWong | 园豆:2328 (老鸟四级) | 2015-02-06 14:27

@JeffWong:。。。。。。 还是这个错误,以下是异常堆栈:

[OracleException (0x80131938): ORA-12154: TNS:could not resolve the connect identifier specified
]
   System.Data.OracleClient.OracleException.Check(OciErrorHandle errorHandle, Int32 rc) +340444
   System.Data.OracleClient.OracleInternalConnection.OpenOnLocalTransaction(String userName, String password, String serverName, Boolean integratedSecurity, Boolean unicode, Boolean omitOracleConnectionName) +881
   System.Data.OracleClient.OracleInternalConnection..ctor(OracleConnectionString connectionOptions) +129
   System.Data.OracleClient.OracleConnectionFactory.CreateConnection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningObject) +40
   System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnection owningConnection, DbConnectionPool pool, DbConnectionOptions options) +31
   System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject) +548
   System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject) +69
   System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection owningObject) +470
   System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection) +108
   System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory) +118
   System.Data.OracleClient.OracleConnection.Open() +43
   System.Data.Common.DbDataAdapter.FillInternal(DataSet dataset, DataTable[] datatables, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior) +121
   System.Data.Common.DbDataAdapter.Fill(DataTable[] dataTables, Int32 startRecord, Int32 maxRecords, IDbCommand command, CommandBehavior behavior) +160
   System.Data.Common.DbDataAdapter.Fill(DataTable dataTable) +108
   WebFormDemo.Test.ConnectOracle() in D:\SourceCode\PracticeTest\WebFormDemo\Test.cs:27
   WebFormDemo.WebForm1.Page_Load(Object sender, EventArgs e) in D:\SourceCode\PracticeTest\WebFormDemo\WebForm1.aspx.cs:14
   System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +51
   System.Web.UI.Control.OnLoad(EventArgs e) +92
   System.Web.UI.Control.LoadRecursive() +54
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +772
支持(0) 反对(0) 火悬崖 | 园豆:434 (菜鸟二级) | 2015-02-06 14:38

@火悬崖: 终结方案,重启机器吧。

支持(0) 反对(0) JeffWong | 园豆:2328 (老鸟四级) | 2015-02-06 14:46

@JeffWong: 我遇到这个问题二天了,百度了无数次,重启了无数次。。。。。

支持(0) 反对(0) 火悬崖 | 园豆:434 (菜鸟二级) | 2015-02-06 14:54

@火悬崖: 太同情你了。我之前搞过mysql的.net客户端,出现偶尔连接不了数据库的异常,后来卸载重启然后重装就好了,所以推测不是客户端安装程序的问题,就是环境的问题,有时候我甚至都怀疑是自己RP问题^_^。 解决以后帮忙贴一下解决方案,我非常非常想知道。

支持(0) 反对(0) JeffWong | 园豆:2328 (老鸟四级) | 2015-02-06 14:58

@火悬崖: 再参考一下stackoverflow上给出的解决方法:

http://stackoverflow.com/questions/23475594/oracle-manageddataaccess-tnscould-not-resolve-the-connect-identifier-specified

http://stackoverflow.com/questions/12445201/connecting-c-sharp-app-with-oracle-10g-ora-12154-tnscould-not-resolve-the-con

http://stackoverflow.com/questions/7252286/ora-12154-tnscould-not-resolve-the-connect-identifier-specified

支持(0) 反对(0) JeffWong | 园豆:2328 (老鸟四级) | 2015-02-06 15:03

@JeffWong: 个人觉得会不会是权限或者环境有问题,我也开始怀疑我的RP问题了,再不行就只能重装一下试试了。表示MySQL还没涉及过。

支持(0) 反对(0) 火悬崖 | 园豆:434 (菜鸟二级) | 2015-02-06 15:05

@JeffWong: 参考你给的文章把连接字符串改成:User Id=test;Password=test;Data Source=127.0.0.1:1521/orcl;后报这个错误ORA-06413: Connection not open.

支持(0) 反对(0) 火悬崖 | 园豆:434 (菜鸟二级) | 2015-02-06 15:18
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册