Oracle Connection和nls_lang

时间:2009-05-19 10:45:44

标签: .net oracle oracleclient

我有一个遗留数据库集,NLS_LANG设置为IW8ISO8859P8。我无法改变。

我有另一个不使用unicode的应用程序,它适用于我的应用程序所使用的相同数据。 在一些字段中,有些时候,用户插入字符串的一部分,字符161代表NIS货币simble。 当我尝试使用oledb从.Net读取这些数据时,一切都很好但是当我尝试使用oracle客户端时,我得到了垃圾数据。当我在.Net中插入NIS simble时,它也被保存为垃圾。

我知道在获得数据后我可以操作数据,但我正在寻找.Net中的oracle客户端的一些配置来实现这一点。

我已经在这个问题上工作了几个星期,任何帮助都会得到满足。 TNX 诺姆

3 个答案:

答案 0 :(得分:0)

你看过Oracle的NLS_LANG FAQ吗?

答案 1 :(得分:0)

你检查了客户端上的nls_lang设置吗?对nls设置的任何更改都可以被客户端上的设置(注册表和环境)覆盖。也许这就是你问题的原因。 验证您在客户端上没有任何其他nls设置,并且您的非功能显式更改它。 您可以运行登录后触发器来更改会话格式。这将确保服务器设置将影响所有客户端。 此外,请确保已设置nls_territory。它应该被设置为nls_lang的一部分,但是如果你的意思是nls_language。我相信货币符号受此影响。

答案 2 :(得分:0)

在一天结束时,我使用辅助nvarchar柱解决了它。并触发它们之间的转换。

我在plsql中编写了函数,它使用许多if语句实现的自定义编码与Unicode进行字节转换。

对于每个包含有问题数据的列,我添加了第二个包含nvarchar存储的列,以及使用该函数转换有问题数据的触发器。

因此,旧版应用程序使用并更新varchar列,触发器将其转换为Unicode列。 .Net代码使用Unicode列,并且触发器再次将信息转换为遗留应用程序中使用的有问题的编码。

如果您需要更多信息,请随时与我联系以获取更多信息