我有一个DLL负责在数据库上进行查询。在该DLL中,我有一个方法可以打开应用程序和数据库之间的连接,如下所示:
private OracleConnection _InitConnection()
{
this.LastException = null;
this.Errors = new List<Exception>();
OracleConnection conn = null;
try
{
conn = new OracleConnection("Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=***)(PORT=***)))(CONNECT_DATA=(SERVICE_NAME=****)(SERVER = DEDICATED))); User Id=***; Password=***;");
conn.Open();
}
catch (Exception ex)
{
this.LastException= ex;
this.Errors.Add(ex);
}
return conn;
}
我使用System.Data.OracleClient.dll
版本2.0.50727来管理连接。
此DLL由MVC 4 Web应用程序使用,使用C#和.Net Framework 4.0实现。
当我在Windows窗体项目中使用此DLL时,我可以毫无困难地连接到数据库。但是,当我尝试在MVC系统中使用相同的DLL或使用WebForms时,我收到错误。
我得到的错误是ORA-06413 - Connection not Open
。当我在ISS Express中运行应用程序时,会发生这种情况,设置为32位运行。
当我将ISS Express更改为64位时,我收到错误OCIEnvCreate failed with return code -1 but error message text was not available
。
答案 0 :(得分:0)
我想我已经找到了问题。
在项目中,我使用了另一个项目中的一些库。其中一个在.csproj文件中配置如下
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>TRACE;DEBUG</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<PlatformTarget>AnyCPU</PlatformTarget>
</PropertyGroup>
这意味着该程序的编译版本将存储在\ bin \ Debug路径中。 但是,我用来测试库的控制台应用程序具有以下配置:
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
这意味着程序的输出将存储在bin \ Release中。 这导致了这个问题,因为当我的控制台应用程序试图使用该库时,它位于另一个文件夹中。 在VS2015中无法解决这个问题,但是当我将控制台应用程序的属性组更改为与我的库相同的配置时,问题就消失了。