【问题标题】:Inexact character conversion during translation翻译过程中字符转换不准确
【发布时间】:2012-08-10 19:10:35
【问题描述】:

当我尝试对用户进行身份验证时,经常遇到以下错误:

ERROR [HY000] [Informix .NET provider]Inexact character conversion during translation.

 public static int IsValidPortalUser(string p_u, string p_p)
        {
            int ret = 0;
            using (IfxConnection conn = new IfxConnection(connectionString))
            {
                IfxCommand DBCmd = new IfxCommand();
                String p = My_Decryption_2(p_p);
                try
                {
                    if (conn.State == ConnectionState.Closed)
                        conn.Open();
                    DBCmd = new IfxCommand();
                    DBCmd.Connection = conn;
                    DBCmd.CommandText = "SELECT nvl(emp_num,0) FROM emp_mas_queue WHERE username = ? AND DECRYPT_CHAR(password, 'XXXXXX') = ? ";
                    DBCmd.Parameters.Add("user_name", p_u);
                    DBCmd.Parameters.Add("password", p);
                    using (IfxDataReader dataReader = DBCmd.ExecuteReader())
                    {
                        if (dataReader.Read())
                        {
                            if (dataReader[0] != null && !string.IsNullOrEmpty(dataReader[0].ToString()))
                            {
                                ret = int.Parse(dataReader[0].ToString());
                            }
                        }
                        dataReader.Close();

                    }
                }
                catch (ThreadAbortException e)
                {

                }
                catch (ApplicationException e)
                {

                }
                conn.Close();

                return ret;
            }
        }

【问题讨论】:

  • 您的 informix 数据库运行在什么样的系统上?
  • 你看过这个链接吗? www-01.ibm.com/support/docview.wss?uid=swg1IV03642 我认为的问题是用户的姓名或密码中的字符会破坏informix驱动程序。解决方案可以是:限制可接受的字符,或以中性格式(例如 base64)存储用户名和/或密码。
  • 你能告诉我chars在他们的名字中是什么意思吗?!
  • 值得注意的是,在您的数据库中拥有“可解密”密码也是一个非常糟糕的主意
  • 您的 .NET 客户端在哪个语言环境中工作(CLIENT_LOCALE 的设置是什么)?您的数据库在哪个语言环境中工作?很可能这两个语言环境使用不同的字符集,并且它们之间没有 1:1 的转换,并且此消息与此有关。 Informix 服务器是否与您的 .NET 客户端在同一台机器上?它是在 Unix 机器上运行的吗?

标签: c# asp.net encryption iis-7.5 informix


【解决方案1】:

我相信这可能是编码的问题。

我找到了这篇文章(通过谷歌翻译)

link

这通常是由于人们从具有不同编码的来源复制+粘贴他们的详细信息造成的。在处理之前尝试将字符串转换为您正在使用的任何代码页。

【讨论】:

  • 我认为您的意思是编码,而不是代码页。 +1 通过复制/粘贴引导我朝着正确的方向前进。我将网页中的文本直接复制到 Visual Studio 中并出现此错误。以下是有关如何删除无效字符的链接:stackoverflow.com/questions/20889996/…
【解决方案2】:

由于这是 stackoverflow 中唯一提到此错误的地方,我将补充说,我通过在连接字符串级别指定 DB_LOCALE 和 CLIENT_LOCALE 解决了类似的问题,确保两者相同并对应于数据库 DB_LOCALE。

修改环境变量无效。

我必须说它是在具有以下客户端版本的 Windows 10 系统上: 客户端dk.4.10.TC6DE.WIN

【讨论】:

  • 你能写下连接字符串吗?
  • t 是这样的:new PDO("informix:host=host.domain.com; service=9800; database=common_db; server=ids_server; protocol=onsoctcp; EnableScrollableCursors=1;DB_CLIENT=us_en.819;DB_LOCALE=us_en.819", "testuser", "tespass");
猜你喜欢
  • 1970-01-01
  • 2015-04-30
  • 1970-01-01
  • 2015-02-25
  • 2011-10-20
  • 1970-01-01
  • 2019-09-07
  • 1970-01-01
相关资源
最近更新 更多