【发布时间】: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