的ArgumentException:在连接字符串无法识别的属性 '用户ID'
我使用:的ArgumentException:在连接字符串无法识别的属性 '用户ID'
- 利用数据库服务器10
- Advantage.Data.Provider.dll(v.9.10.2.9)
在大多数工作站上,一切工作都非常稳定,但是今天我们的一位新客户报告说他遇到了我们的应用程序的麻烦。日志显示以下平坦异常:
System.ArgumentException: 连接字符串中无法识别的属性“用户标识”。在 Advantage.Data.Provider.AdsConnectionStringHandler.ParseConnectionString(字符串 的strConnect)在 Advantage.Data.Provider.AdsPoolManager.GetConnection(字符串 strConnectionString,AdsInternalConnection &了InternalConnection, AdsConnectionPool &池)在 Advantage.Data.Provider.AdsConnection 。开()
只要相同的代码被所有其他客户运作良好,我想这个问题可能与运行环境,但我仍然试图找出究竟是什么能引起这个问题。
任何想法?
UPDATE
我只是通过Advantage.Data.Provider.dll
代码看了一下,发现他们用的是Hashtable
相匹配的连接字符串属性和Hashtable
的初始化看起来有点怪我:
public static Hashtable CreateCaseInsensitiveHashtable()
{
return new Hashtable((IEqualityComparer) StringComparer.CurrentCultureIgnoreCase);
}
我想StringComparer.CurrentCultureIgnoreCase
可能是一个麻烦,但我需要检查。
这已在客户端的版本9.10.0.21和更高版本中修复。从page with the download link:
2 - 固定在导致连接字符串不正确地对某些地区(TR-TR特异性)进行解析的优势.NET数据提供的错误。
哦,这是伟大的,谢谢!我以为我有最新的9. *版本。 – 2012-08-17 15:54:27
哦,一年,StringComparer.CurrentCultureIgnoreCase
是问题。它看起来像Advantage.Data.Provider.dll
中的错误。应该使用StringComparer.InvariantCultureIgnoreCase
。下面的代码显示该问题:
foreach (var culture in CultureInfo.GetCultures(CultureTypes.AllCultures))
{
Thread.CurrentThread.CurrentCulture = culture;
Thread.CurrentThread.CurrentUICulture = culture;
var isEquals = StringComparer.CurrentCultureIgnoreCase
.Compare("user id", "User ID") == 0;
if (!isEquals)
Console.WriteLine("culture: {0}; equals: {1}", culture.Name, isEquals);
}
它提供了一个输出:
culture: tr; equals: False
culture: az; equals: False
culture: tr-TR; equals: False
culture: az-Latn-AZ; equals: False
culture: az-Latn; equals: False
的解决方法应该是简单的 - 在连接字符串中使用User ID
。我会问客户当前在系统中设置了哪种文化。
UPDATE
该客户确认他有土耳其文化。
你可以发布连接字符串吗? (可以没有用户名/密码,所以我们可以看到格式) – 2012-08-17 10:59:36
@FedorHajdu连接字符串是非常正常的,它看起来像:'data source = \\ server \ db \ system-1 \ maindb.add; servertype = Remote ;用户ID =管理员;密码= ***; TrimTrailingSpaces =真' – 2012-08-17 11:03:57