ADO.net连接oracle问题

a13951845000 2012-09-14 05:13:17
(1)环境
windows7,64位,oracle11g,vs2010
(2)代码
OracleConnection conn = new OracleConnection("Data Source=orcl;User Id=scott;Password=tiger;Integrated Security=no;");
conn.Open();

OracleCommand cmd = conn.CreateCommand();
cmd.CommandText = "SELECT TNAME FROM TAB";
Label1.Text = ((OracleString)cmd.ExecuteOracleScalar()).Value;

cmd.Dispose();
conn.Dispose();

(3)现象
编译通过,如果目标平台选择:X86,则:

“/”应用程序中的服务器错误。
--------------------------------------------------------------------------------

未能加载文件或程序集“WebApplication2”或它的某一个依赖项。试图加载格式不正确的程序。
说明: 执行当前 Web 请求期间,出现未经处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: System.BadImageFormatException: 未能加载文件或程序集“WebApplication2”或它的某一个依赖项。试图加载格式不正确的程序。

源错误:

执行当前 Web 请求期间生成了未经处理的异常。可以使用下面的异常堆栈跟踪信息确定有关异常原因和发生位置的信息。

程序集加载跟踪: 下列信息有助于确定程序集“WebApplication2”未能加载的原因。


警告: 程序集绑定日志记录被关闭。
要启用程序集绑定失败日志记录,请将注册表值 [HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD)设置为 1。
注意: 会有一些与程序集绑定失败日志记录关联的性能损失。
要关闭此功能,请移除注册表值 [HKLM\Software\Microsoft\Fusion!EnableLog]。



堆栈跟踪:


[BadImageFormatException: 未能加载文件或程序集“WebApplication2”或它的某一个依赖项。试图加载格式不正确的程序。]
System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks) +0
System.Reflection.RuntimeAssembly.nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks) +39
System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyName assemblyRef, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection, Boolean suppressSecurityChecks) +132
System.Reflection.RuntimeAssembly.InternalLoad(String assemblyString, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection) +144
System.Reflection.Assembly.Load(String assemblyString) +28
System.Web.Configuration.CompilationSection.LoadAssemblyHelper(String assemblyName, Boolean starDirective) +46

[ConfigurationErrorsException: 未能加载文件或程序集“WebApplication2”或它的某一个依赖项。试图加载格式不正确的程序。]
System.Web.Configuration.CompilationSection.LoadAssemblyHelper(String assemblyName, Boolean starDirective) +618
System.Web.Configuration.CompilationSection.LoadAllAssembliesFromAppDomainBinDirectory() +209
System.Web.Configuration.CompilationSection.LoadAssembly(AssemblyInfo ai) +130
System.Web.Compilation.BuildManager.GetReferencedAssemblies(CompilationSection compConfig) +178
System.Web.Compilation.BuildManager.GetPreStartInitMethodsFromReferencedAssemblies() +94
System.Web.Compilation.BuildManager.CallPreStartInitMethods() +332
System.Web.Hosting.HostingEnvironment.Initialize(ApplicationManager appManager, IApplicationHost appHost, IConfigMapPathFactory configMapPathFactory, HostingEnvironmentParameters hostingParameters, PolicyLevel policyLevel, Exception appDomainCreationException) +677

[HttpException (0x80004005): 未能加载文件或程序集“WebApplication2”或它的某一个依赖项。试图加载格式不正确的程序。]
System.Web.HttpRuntime.FirstRequestInit(HttpContext context) +9091196
System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext context) +97
System.Web.HttpRuntime.ProcessRequestInternal(HttpWorkerRequest wr) +258[/b][/b]


如果目标平台选择其它,则全部出现以下现象:

试图加载格式不正确的程序。 (异常来自 HRESULT:0x8007000B)
说明: 执行当前 Web 请求期间,出现未经处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: System.BadImageFormatException: 试图加载格式不正确的程序。 (异常来自 HRESULT:0x8007000B)

源错误:


(4)补充
此段代码在window xp,vs2008,oracle10环境下运行正常。

请帮助。谢谢





--------------------------------------------------------------------------------
版本信息: Microsoft .NET Framework 版本:4.0.30319; ASP.NET 版本:4.0.30319.272
...全文
231 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuan.ye 2012-09-17
  • 打赏
  • 举报
回复
oracle的问题一般都不好解决,不是通过回帖就能搞定的。
孟子E章 2012-09-17
  • 打赏
  • 举报
回复
另外,可以参考
http://stackoverflow.com/questions/3477445/oracle-0x80004005ora-12154-tnscould-not-resolve-the-connect-identifier

里面有
After including the USERID\USERS in my Group or user names for the permission in the TNSNAMES.ORA file it worked
孟子E章 2012-09-17
  • 打赏
  • 举报
回复
希望你再好好看看
http://connectionstrings.com/oracle
这个,连接方法有很多,不同的配置可以有不同的连接方法,你可以再琢磨下,
现在手头没有现成的oracle版本帮你测试
a13951845000 2012-09-17
  • 打赏
  • 举报
回复
孟子E章大人:
我读过您写的书和网上资料很多。使我收获很大。
我现在的现象是:原先装了ODP.net后,sqlplus也连不能,显示ORA-12154: TNS:could not resolve the connect identifier specified。我修改了计算机的环境变更后,sqlplus能连能通。
但为何通过VS2010不能,显示ORA-12154: TNS:could not resolve the connect identifier specified。

另:
我现在如将后台代码改为如下:

string connString =
"Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP) " +
"(HOST=localhost)(PORT=‌​1521)))" +
"(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=orcl)));" +
"User Id=scott;Password=tiger;";
using (OracleConnection conn = new OracleConnection(connString))
{
string sqlSelect = "SELECT * FROM TAB";
using (OracleDataAdapter da = new OracleDataAdapter(sqlSelect, conn))
{
var table = new DataTable();
da.Fill(table);

if (table.Rows.Count > 1)
Console.WriteLine("Successfully read oracle.");
}
}

则运行后显示:

ORA-12545: Connect failed because target host or object does not exist
说明: 执行当前 Web 请求期间,出现未经处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: Oracle.DataAccess.Client.OracleException: ORA-12545: Connect failed because target host or object does not exist

源错误:


行 46: {
行 47: var table = new DataTable();
行 48: da.Fill(table);
行 49:
行 50: if (table.Rows.Count > 1)


源文件: e:\example\testoracle\Default2.aspx.cs 行: 48

堆栈跟踪:


[OracleException (0x80004005): ORA-12545: Connect failed because target host or object does not exist]
Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, String procedure, Boolean bCheck) +1567
Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, Object src) +59
Oracle.DataAccess.Client.OracleConnection.Open() +4945
Oracle.DataAccess.Client.OracleCommand.ExecuteReader(Boolean requery, Boolean fillRequest, CommandBehavior behavior) +515
Oracle.DataAccess.Client.OracleDataAdapter.Fill(DataTable[] dataTables, Int32 startRecord, Int32 maxRecords, IDbCommand command, CommandBehavior behavior) +350
System.Data.Common.DbDataAdapter.Fill(DataTable dataTable) +115
Default2.TestOracle() in e:\example\testoracle\Default2.aspx.cs:48
Default2.Page_Load(Object sender, EventArgs e) in e:\example\testoracle\Default2.aspx.cs:17
System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +14
System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +35
System.Web.UI.Control.OnLoad(EventArgs e) +91
System.Web.UI.Control.LoadRecursive() +74
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +2207


请求帮助。谢谢!
a13951845000 2012-09-17
  • 打赏
  • 举报
回复
谢谢孟子E章等,解决了,是我少设置了环境变更。
孟子E章 2012-09-15
  • 打赏
  • 举报
回复
参见
http://stackoverflow.com/questions/4228739/vs2010-oracle-driver-ora-12154-tsncould-not-resolve-the-connect-identifier
http://www.oracle.com/technetwork/articles/dotnet/vs2010-oracle-dev-410461.html
http://www.blogjava.net/wahahacj/archive/2007/11/19/161689.html

另外,连接方法有很多种方法
http://connectionstrings.com/oracle

a13951845000 2012-09-15
  • 打赏
  • 举报
回复
我安装了32位的ODP.NET
后台代码为:

string oracleConStr = "Data Source=orcl;PERSIST SECURITY INFO=False;User Id=scott;Password=tiger;";
using (OracleConnection oracleCon = new OracleConnection(oracleConStr))
{
oracleCon.Open();
}

执行后报以下错误:(注:在SQL plus中可以正确连接到数据库)

ORA-12154: TNS:could not resolve the connect identifier specified
说明: 执行当前 Web 请求期间,出现未经处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: Oracle.DataAccess.Client.OracleException: ORA-12154: TNS:could not resolve the connect identifier specified

源错误:


行 21: using (OracleConnection oracleCon = new OracleConnection(oracleConStr))
行 22: {
行 23: oracleCon.Open();
行 24: }
行 25:


源文件: e:\example\testoracle\Default2.aspx.cs 行: 23

堆栈跟踪:


[OracleException (0x80004005): ORA-12154: TNS:could not resolve the connect identifier specified]
Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, String procedure, Boolean bCheck) +1559
Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, Object src) +59
Oracle.DataAccess.Client.OracleConnection.Open() +4939
Default2.Button1_Click(Object sender, EventArgs e) in e:\example\testoracle\Default2.aspx.cs:23
System.Web.UI.WebControls.Button.OnClick(EventArgs e) +118
System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +112
System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +10
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +13
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +36
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +5563




--------------------------------------------------------------------------------
版本信息: Microsoft .NET Framework 版本:4.0.30319; ASP.NET 版本:4.0.30319.272
a13951845000 2012-09-14
  • 打赏
  • 举报
回复
首先感谢【孟子E章】:
我进入32-bit ODP.NET下一页后,有很多下载,请问应下载哪一个
孟子E章 2012-09-14
  • 打赏
  • 举报
回复
vs2010里面,代码始终是以32位运行的,即使你的机器是64位,你必须安装32位的ODP.NET才能在VS里面运行。
当然,发布到iis不受这个限制

下载地址
http://www.oracle.com/technetwork/topics/dotnet/index-085163.html

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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