You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SSRS 2022搭配ODPM 19.21查询USERENV('LANG')结果随机切换问题

问题场景
  • 正在做SSRS 2022升级前的兼容性验证,用Oracle ODP.Net Managed Driver(ODPM)19.21版本连接Oracle E-Business Suite 11i(Oracle 11.2.0.4)数据库
  • 原ODP.Net版本依赖Windows注册表的NLS_LANG设置,但ODPM不支持这个配置
  • 测试发现执行SELECT userenv('LANG') FROM dual时,结果在ZHT和US之间随机切换;把分页报表的“Language Property”设为en-US也没用,SSRS没把报表语言传递给ODPM,需要让这个SQL始终返回US
可行解决办法

1. 连接字符串里指定NLS参数

直接在数据库连接字符串中添加NLS_LANGUAGE=AMERICAN参数,强制会话语言为英文。示例:

Data Source=你的EBS数据库实例;User Id=账号;Password=密码;NLS_LANGUAGE=AMERICAN;NLS_TERRITORY=AMERICA

ODPM会优先读取连接字符串里的NLS配置,覆盖系统默认值,保证会话语言稳定为US。

2. 数据集SQL里先设置会话参数

在查询userenv('LANG')前,先执行ALTER SESSION语句强制设置语言,把两个语句合并到数据集SQL中:

ALTER SESSION SET NLS_LANGUAGE='AMERICAN';
SELECT userenv('LANG') FROM dual;

注意要确保SSRS数据集允许执行多语句SQL,这样查询前会话语言就被固定下来了。

3. 配置ODPM全局设置(全报表生效)

找到ODPM的配置文件Oracle.ManagedDataAccess.dll.config,在<oracle.manageddataaccess.client>节点下添加全局NLS配置:

<settings>
  <setting name="NLS_LANGUAGE" value="AMERICAN"/>
  <setting name="NLS_TERRITORY" value="AMERICA"/>
</settings>

这个配置会作用于所有使用ODPM的SSRS连接,不用逐个改报表或连接字符串,统一会话语言为英文。

验证方式

设置完成后重新运行报表,执行SELECT userenv('LANG') FROM dual确认结果始终为US,同时检查其他依赖语言的报表内容是否正常显示。

内容的提问来源于stack exchange,提问作者Wilson Shen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 04:17:05