oracle home 没有 IUSR_MachineName 权限
是oracle的安装路径么,我试试看看。
怎么没看到有这个权限,能方便说下操作方法么?
@火悬崖: 你先把oracle home 的目录设置为everyone full controls 试试
@Yu: 是oracle的安装路径么,已经设置了,还是不行。
@火悬崖: 看看这个能不能
http://blog.csdn.net/huzia/article/details/21526043
@Yu: TNS_ADMIN这个环境变量试过了,不行。oracle home是什么意思?ORACLE_HOME 环境变
量有什么用处的?
@火悬崖: 就是ORACLE_HOME 指向的路径
@Yu: 专业名词还是不太懂,是安装路径么?
@火悬崖: 是的
@Yu: 把连接字符串改成:User Id=test;Password=test;Data Source=127.0.0.1:1521/orcl;后报这个错误ORA-06413: Connection not open.是什么原因呢?
@火悬崖: conn.Open()这一行取消注释。在winform中先通过,再验证webform。
@火悬崖: 所在目录是不能有括号的
@JeffWong: 取消注释了,winform通过了,webform还是不行了。
@Yu: 程序的目录是没有括号的。
@火悬崖: 你的 PLSQL Developer 安装目录
@Yu: 看了下,也没有括号。
@火悬崖: 你调成本地IIS来运行WEB
@火悬崖: 你的vs是不是安装在 Program files(x86) 目录下?
@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),这样会有问题么
@火悬崖: 把IIS 应用池 -高级设置的Enable 32-bit application 设置为true
@Yu: 在IIS中可以运行了,谢谢你!但是在vs中运行还是那个错误,是什么原因呢?
@火悬崖: 重装
@Yu: 重装?重装什么?是什么原因呢。
@火悬崖: 不支持括号的BUG
@Yu: 这样只能重转操作系统了吧,不然vs还是有一部分是默认在c盘的Program files(x86)
@火悬崖: 重装VS可以了
@Yu: 我装vs的时候,有一部分路径是不可选的,还是会在c盘的Program files(x86),怎么处理?为什么用IIS就可以正确运行呢?
@火悬崖: 或者想想咋么把 iis express 重装到Program files(x86) 之外
@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
报这个错是什么意思?
@火悬崖: 不是可以运行了吗
@Yu: 想明白是什么原因,还请指教哈。
@火悬崖: 你的oracle是32位的,IIS必须支持32位运行
@Yu: 这点明白了,但是好像又有更多的不明白了,以后有什么不明白的还望指教哈,谢谢!
@火悬崖: 嗷嗷嗷嗷嗷嗷 看懂了 还是oracle客户端的bug,在特定条件下才会发生bug,winform是不需要宿主的,而web需要iis
@JeffWong: 谢谢你帮我找的资料,我还是不是太明白,以后有什么问题,继续指教哈。
请参考这里:http://blog.csdn.net/loadrunn/article/details/7895726
谢谢,pl/sql可以连接上,winform也能操作oracle,就是webfrom报这个错。
@火悬崖: 还有一种可能是环境变量引发的 看这里:http://bbs.csdn.net/topics/390122437
这类问题通常都有共性,时灵时不灵,要么用错了,要么环境没配好。你可以顺便看一下webform下的数据库配置文件和winform下的配置是否有不同。
@JeffWong: 试了一下貌似也不行。因为我是想测试到底错在哪了,所以连接字符串之类的我都是写在程序中的,所以可以确定二个程序是一样的,我就搞不明白到底错在哪里了。
@火悬崖: 也就是winform和webform用到的数据访问是同一段代码了?oracle有端口访问限制吗?跟踪调试下试试吧?
@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运行失败。
@火悬崖: conn.Open()这个应该是要的,必须显式打开sql连接。在catch处把异常调用堆栈log一下。或者你直接尝试一个简单的查询,类似select 1这种,然后OracleCommand.ExecuteScalar看一下。如果还是报相似的错误,将webform程序下的Oracle相关的dll重新引用一下。
@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
@火悬崖: 终结方案,重启机器吧。
@JeffWong: 我遇到这个问题二天了,百度了无数次,重启了无数次。。。。。
@火悬崖: 太同情你了。我之前搞过mysql的.net客户端,出现偶尔连接不了数据库的异常,后来卸载重启然后重装就好了,所以推测不是客户端安装程序的问题,就是环境的问题,有时候我甚至都怀疑是自己RP问题^_^。 解决以后帮忙贴一下解决方案,我非常非常想知道。
@火悬崖: 再参考一下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
@JeffWong: 个人觉得会不会是权限或者环境有问题,我也开始怀疑我的RP问题了,再不行就只能重装一下试试了。表示MySQL还没涉及过。
@JeffWong: 参考你给的文章把连接字符串改成:User Id=test;Password=test;Data Source=127.0.0.1:1521/orcl;后报这个错误ORA-06413: Connection not open.