【发布时间】:2014-01-07 13:18:16
【问题描述】:
我有一个 ASP .NET MVC 4 应用程序,其数据库 (Oracle 10g) 位于远程服务器上。
现在我希望它与本地数据库服务器(在同一台机器上)一起工作。我设置了 Oracle 10G 快捷版。设置成功,我可以使用 SQL plus 访问数据库。但我的应用程序根本没有连接到它(使用 Oracle.DataAccess.dll)。
我在互联网上搜索了很多,发现可能是因为安装 Visual Studio 2010 的目录路径中有一个特殊字符(Program Files (x86))。所以我把它卸载了,安装在另一个没有特殊字符的路径中。
应用程序仍然无法连接到本地 oracle 服务器。
为了测试,我创建了另一个简单的控制台应用程序,并在 Main() 函数中编写了连接本地数据库的代码,并成功连接。应用程序中完全相同的代码不起作用。
我得到的错误是:
ORA-6413: Connection not open.
Oracle.DataAccess.Client.OracleException was unhandled by user code
Message=ORA-6413: Connection not open.
Source=Oracle Data Provider for .NET
DataSource=""
Number=6413
Procedure=""
StackTrace:
at Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, String procedure)
at Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, Object src)
at Oracle.DataAccess.Client.OracleConnection.Open()
at IBeam.Common.Repositories.SessionProvider.GetSessionFactory(String groupCode, String companyCode) in D:\Projects\IBeamNewRepo\IBeamCopy\Src\Trunk\IBeam.Common\Repositories\SessionProvider.cs:line 61
at IBeam.Common.Repositories.SessionProvider.GetSession() in D:\Projects\IBeamNewRepo\IBeamCopy\Src\Trunk\IBeam.Common\Repositories\SessionProvider.cs:line 191
at IBeam.Controllers.AccountController.Login(String url) in D:\Projects\IBeamNewRepo\IBeamCopy\Src\Trunk\IBeam\Controllers\AccountController.cs:line 38
at lambda_method(Closure , ControllerBase , Object[] )
at System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters)
at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters)
at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters)
at System.Web.Mvc.Async.AsyncControllerActionInvoker.InvokeSynchronousActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters)
at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass42.<BeginInvokeSynchronousActionMethod>b__41()
at System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass8`1.<BeginSynchronous>b__7(IAsyncResult _)
at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End()
at System.Web.Mvc.Async.AsyncResultWrapper.End[TResult](IAsyncResult asyncResult, Object tag)
at System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult)
at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass37.<>c__DisplayClass39.<BeginInvokeActionMethodWithFilters>b__33()
at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass4f.<InvokeActionMethodFilterAsynchronously>b__49()
我的代码连接到 Oracle:
var connection = new OracleConnection();
var str =
@"Data Source = (DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = mridula-PC)(PORT = 1521))
(CONNECT_DATA =
(SERVICE_NAME = XE)
)
);
User Id=app$security;
Password=appsecurity;";
connection.ConnectionString = str;
connection.Open(); <- Exception Here
我的操作系统是Windows 7。
【问题讨论】:
标签: c# asp.net-mvc-4 oracle-xe