最近新接触oracle,遇到了一个觉得诡异的问题。同样的代码,在form下可以执行,在web下不能执行。
开发环境:oracle安装在虚拟机上,本地64位 windows server 2008 + vs2010
代码非常简单,如下:
string strConn = "Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.124) (PORT=1521)))(CONNECT_DATA=(SERVICE_NAME= orcl)));User Id=scott;Password=scott;Persist Security Info=True";
using (OracleConnection conn = new OracleConnection(strConn))
{
conn.Open();
OracleCommand comm = new OracleCommand("select DEPTNO from DEPT", conn);
object obj = comm.ExecuteScalar();
conn.Close();
}
在web下调试执行到conn.Open();包如下错误:
ORA-6413: 连接未打开。
ServerVersion这里引发错误,应该是你客户端版本跟服务端的版本不太一样~~或者是服务是x86客户端是x64这样Web好像访问不了。
我也想过版本问题,可是为什么form程序可以呢?这个我不太明白?
@流浪漂泊: 以前我搞Web的时候就是这个Oracle的版本问题,还有Vs的生成里面也有X86 Or X64 CPU选择的,你可以也试试。Form的程序当时没有遇到这种情况过,也没考虑。这问题百分之八九十都应该是版本引起的问题。你StackTrace里面也指向了 get_ServerVersion()这里
VS2010web项目只支持32位,那么你需要安装32位的Oracle客户端。
如果使用64位,需要vs2013勾选:对网站和项目使用IIS Express的64位版。在“工具--选项--项目和解决方案--Web项目”中。
Form应用可以以x64编译的,所以没问题