【问题标题】:Find Informix Db Locale查找 Informix Db 语言环境
【发布时间】:2023-03-31 09:27:01
【问题描述】:

我正在尝试连接到 IBM 的 Informix 数据库的以下代码。

  public void MakeConnection()
        {
            string ConnectionString = "Database=databasename;Host=ipaddress;Server=servername;Service=port;Protocol = olsoctcp; UID = userid; Password = password;";
            IfxConnection conn = new IfxConnection();
            conn.ConnectionString = ConnectionString;
            try
            {
                conn.Open();
            }
            catch (IfxException ex)
            {
                Console.WriteLine(ex.ToString());
            }    
            Console.ReadLine();
        }

打开连接时出现以下错误。

错误 [HY000] [Informix .NET 提供程序][Informix]数据库区域设置信息不匹配。

当我尝试使用 windows ODBC Data sources 应用程序连接时,通过在用户 DSN 下创建新的用户数据源并在 Informix ODBC driver setup 的每个部分下提供所有必要的值,我能够成功连接。

我所了解的是,客户端应用程序和数据库的 Database Locale 值应该相同才能正确执行查询,并且我尝试在配置用户 DSN 时使用 en_US.57372 and en_US.UTF8 DB Locale,效果很好。我在这里张贴一张图片以便更好地理解。

如果有人可以帮助我了解我在哪里可以找到在 Informix 数据库中配置的 DB 区域设置,以及详细了解导致此错误的实际原因。

【问题讨论】:

  • 如果您可以使用连接和查询数据库,您可以通过以下查询找到语言环境:SELECT * FROM systables WHERE tabid IN ( 90, 91 );。之后,您可以将语言环境信息添加到您的连接字符串(查看在线 Informix .net 文档)。
  • @LuísMarques 感谢您的帮助;

标签: c# odbc informix


【解决方案1】:

终于可以从测试应用程序连接到数据库了!。好的,我们开始吧,

第 1 步: 首先我们需要找到该数据库允许我们使用的数据库语言环境?所以按照他在评论部分提到的@Luis Marques方式,发现使用的Database Localeen_US.57372,也支持en_US.UTF8

第 2 步: 默认情况下,连接对象的 client locale and database locale 属性值将是安装 Informix ODBC driver 时设置的任何默认值。

稍微修改了我的测试应用代码如下,

   public void MakeConnection()
        {
            string ConnectionString = "Database=databasename;Host=ipaddress;Server=servername;Service=port;Protocol = olsoctcp; UID = userid; Password = password;";
            IfxConnection conn = new IfxConnection();
            conn.ConnectionString = ConnectionString;
            conn.ClientLocale = "en_US.UTF8";
            conn.DatabaseLocale = "en_US.UTF8";
            try
            {
                conn.Open();
            }
            catch (IfxException ex)
            {
                Console.WriteLine(ex.ToString());
            }    
            Console.ReadLine();
        }

因此,使用我们在步骤 1 中获得的内容手动为连接对象分配 client and database locale 值解决了这个问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-18
    • 2019-06-25
    • 1970-01-01
    相关资源
    最近更新 更多