【发布时间】:2014-09-29 01:18:05
【问题描述】:
我在启动要在 Windows 2003 R2 Server 上运行的小型 C# 控制台应用程序时遇到问题。 该演示用于检查为什么无法建立与位于 Windows 2003 R2 服务器上的 Oracle 9.2 的连接,运行来自 IIS 上托管的 WCF 的相同代码。
static void Main(string[] args)
{
try
{
string CONNECTION_STRING =
"User Id=YYYY;Password=ZZZZ;Data Source=(DESCRIPTION=" +
"(ADDRESS=(PROTOCOL=TCP)(HOST=X.XXX.X.X)(PORT=1521))" +
"(CONNECT_DATA=(SID=ORCL)));";
string oradb = CONNECTION_STRING;
using (OracleConnection conn = new OracleConnection(oradb))
{
conn.Open();
Console.WriteLine("Connected to Oracle Database {0}", conn.ServerVersion);
Console.WriteLine();
OracleCommand cmd = new OracleCommand();
cmd.Connection = conn;
cmd.CommandText = "select * from cur_clients";
cmd.CommandType = CommandType.Text;
OracleDataReader dr = cmd.ExecuteReader();
dr.Read();
//var Text = dr.GetString(0);
object[] values = new object[dr.FieldCount];
dr.GetValues(values);
foreach (var value in values)
{
Console.Write("{0},",value);
}
conn.Close();
//conn.Dispose();
}
}
catch (Exception ex)
{
Console.WriteLine("Error : {0}", ex);
}
Console.WriteLine("Press ENTER to continue");
Console.ReadLine();
}
}
服务器已安装 Oracle 9.2 数据库。 从远程机器从外部运行相同的代码一切正常,但在本地系统中却不行。
返回错误
[2014.08.05 17:23:37.79808] OCIEnvNlsCreate failed with return code -1 but error message text was not available.
at System.Data.OracleClient.OciHandle..ctor(OciHandle parentHandle, HTYPE handleType, MODE ocimode, HANDLEFLAG handleflags)
at System.Data.OracleClient.OciNlsEnvironmentHandle..ctor(MODE environmentMode)
at System.Data.OracleClient.OCI.DetermineClientVersion()
at System.Data.OracleClient.OracleInternalConnection.OpenOnLocalTransaction(String userName, String password, String serverName, Boolean integratedSecurity, Boolean unicode, Boolean omitOracleConnectionName)
at System.Data.OracleClient.OracleInternalConnection..ctor(OracleConnectionString connectionOptions)
at System.Data.OracleClient.OracleConnectionFactory.CreateConnection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningObject)
at System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnection owningConnection, DbConnectionPool pool, DbConnectionOptions options)
at System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject)
at System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject)
at System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection owningObject)
at System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection)
at System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)
at System.Data.OracleClient.OracleConnection.Open()
根据一些信息,这是对 Oracle 安装文件夹的权限问题。在完全控制 C:\Oracle\Ora92 后,第一个问题消失了,但下一个问题又出现了。
Error : System.Data.OracleClient.OracleException (0x80131938): ORA-12705: invalid or unknown NLS parameter value specified
at System.Data.OracleClient.OracleException.Check(OciErrorHandle errorHandle, Int32 rc)
at System.Data.OracleClient.OracleInternalConnection.OpenOnLocalTransaction(String userName, String password, String serverName, Boolean integ
at System.Data.OracleClient.OracleInternalConnection..ctor(OracleConnectionString connectionOptions)
at System.Data.OracleClient.OracleConnectionFactory.CreateConnection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConnectionPo
at System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnection owningConnection, DbConnectionPool pool, DbConnectionOptio
at System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject)
at System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject)
at System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection owningObject)
at System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection)
at System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)
at System.Data.OracleClient.OracleConnection.Open()
at OracleConsoleTest.Program.Main(String[] args)
在注册表中搜索 NLS 语言参数后,我在位置上找到了 HKLM\SOFTWARE\ORACLE\ 有一个参数 NLS_LANG 的值为“NA”
删除此我的应用程序已启动,但所有其他第 3 方 Oracle 应用程序停止工作。
我真的不知道如何连接到旧的 Oracle 9.2 版本的正确方法。
我尝试了 Oracle 最新的 .NET 驱动程序,但它们不支持 Oracle 9.2
更多信息:来自同一台服务器的 SQLPlus 可以完美运行。数据库可以正常访问。
感谢任何有关此问题的帮助。
【问题讨论】:
标签: c# sql oracle wcf oracle11g