的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可能是一个麻烦,但我需要检查。

+0

你可以发布连接字符串吗? (可以没有用户名/密码,所以我们可以看到格式) – 2012-08-17 10:59:36

+0

@FedorHajdu连接字符串是非常正常的,它看起来像:'data source = \\ server \ db \ system-1 \ maindb.add; servertype = Remote ;用户ID =管理员;密码= ***; TrimTrailingSpaces =真' – 2012-08-17 11:03:57

这已在客户端的版本9.10.0.21和更高版本中修复。从page with the download link

2 - 固定在导致连接字符串不正确地对某些地区(TR-TR特异性)进行解析的优势.NET数据提供的错误。

+0

哦,这是伟大的,谢谢!我以为我有最新的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

该客户确认他有土耳其文化。