标签:chinese pre config 相关 lan work 名称 ref var
本方法缺点: 2、增加程序包的体积(Oracle instant client本身有几十兆大小)
下面说一下如何实现。
string oraclePath = System.Windows.Forms.Application.StartupPath + @"\oracle"; Environment.SetEnvironmentVariable("PATH", oraclePath,EnvironmentVariableTarget.Process); Environment.SetEnvironmentVariable("NLS_LANG", "SIMPLIFIED CHINESE_CHINA.ZHS16GBK", EnvironmentVariableTarget.Process);
解释一下上面的代码: string oraclePath = System.Windows.Forms.Application.StartupPath + @"\oracle";
这一句取得了oracle 驱动文件夹的位置,也就是放oci.dll的地方。Environment.SetEnvironmentVariable("PATH", oraclePath,EnvironmentVariableTarget.Process);
这一句设置环境变量“PATH”,写入oracle驱动所在的文件夹,第三个参数表示这个PATH只在当前进程起作用,不会修改电脑本身。 注意:如果你用到某些外部程序,还有其他PATH变量要设置,在这里加入就行了。具体方法参见.net相关文档。Environment.SetEnvironmentVariable("NLS_LANG", "SIMPLIFIED CHINESE_CHINA.ZHS16GBK", EnvironmentVariableTarget.Process);
这一句,设置Oracle在通讯过程中使用的语言和字符集。我的项目用的是上面的字符集,对应到你的项目,可用SQL语句去oracle数据库中查询。这个语言和字符集一定要和服务器一致,否则可能会出现乱码甚至无法连接。可能会用到如下SQL语句: //select userenv(‘language‘) from dual; 查询服务端字符集,用来设置上面的参数。 //select * from nls_database_parameters;//服务器字符集 //select * from nls_instance_parameters;//ora文件定义字符集 //select * from nls_session_parameters; //会话字符集
在app.config中修改connectionString为 Persist Security Info=True;User ID=数据库用户名;Password=数据库密码;Unicode=True;Data Source= (DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = 服务器IP地址)(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME = 服务器上的数据库实例名)));
这个主要是把“Data Source”这部分直接用tcp/ip字符串方式替换了(通常Data Source是写tns名称的)
如果你tns名称来访问oracle数据库,那么还要做以下工作。
Environment.SetEnvironmentVariable("TNS_ADMIN", oraclePath,EnvironmentVariableTarget.Process);
整体代码如下:
// 这一句取得了oracle 驱动文件夹的位置,也就是放oci.dll的地方。 string oraclePath = System.Windows.Forms.Application.StartupPath + @"\ORCLconn"; // //这一句设置环境变量“PATH”,写入oracle驱动所在的文件夹, // //第三个参数表示这个PATH只在当前进程起作用,不会修改电脑本身。 // //注意:如果你用到某些外部程序,还有其他PATH变量要设置,在这里加入就行了。具体方法参见.net相关文档。 ///当系统还使用其他软件的环境变量时则需要先获取本机电脑上的环境变脸结合Oracle环境变量一起使用。 string s = Environment.GetEnvironmentVariable("PATH", EnvironmentVariableTarget.Machine); Environment.SetEnvironmentVariable("PATH", s + ";" + oraclePath, EnvironmentVariableTarget.Process); // //这一句,设置Oracle在通讯过程中使用的语言和字符集 Environment.SetEnvironmentVariable("NLS_LANG", "SIMPLIFIED CHINESE_CHINA.ZHS16GBK", EnvironmentVariableTarget.Process); // //在程序的Oracle文件夹下增加tnsnames.ora,并将tns名称的配置写到里边去。 // //b.在程序设置环境变量的地方c.连接字符串里应该可以使用tns名称了 Environment.SetEnvironmentVariable("TNS_ADMIN", oraclePath, EnvironmentVariableTarget.Process);
在C#中,不安装Oracle客户端如何连接Oracle数据库
标签:chinese pre config 相关 lan work 名称 ref var
原文地址:http://www.cnblogs.com/shangshen/p/6178905.html