3

我正在使用:

  • 优势数据库服务器 10
  • Advantage.Data.Provider.dll (v.9.10.2.9)

在大多数工作站上,一切都很稳定,但今天我们的一位新客户报告说他在使用我们的应用程序时遇到了问题。日志显示以下阶段异常:

System.ArgumentException:连接字符串中无法识别的属性“用户 ID”。在 Advantage.Data.Provider.AdsConnectionStringHandler.ParseConnectionString(String strConnect) 在 Advantage.Data.Provider.AdsPoolManager.GetConnection(String strConnectionString, AdsInternalConnection& internalConnection, AdsConnectionPool& pool) 在 Advantage.Data.Provider.AdsConnection.Open()

一旦所有其他客户都可以正常使用相同的代码,我猜这个问题可能与运行环境有关,但我仍在试图找出究竟是什么导致了这个问题。

有任何想法吗?

更新

我刚刚浏览了Advantage.Data.Provider.dll代码,发现它们使用 aHashtable来匹配连接字符串属性,而Hashtable' 的初始化对我来说看起来有点奇怪:

public static Hashtable CreateCaseInsensitiveHashtable()
{
  return new Hashtable((IEqualityComparer) StringComparer.CurrentCultureIgnoreCase);
}

我想StringComparer.CurrentCultureIgnoreCase这可能是个麻烦,但我需要检查一下。

4

2 回答 2

3

这已在客户端的 9.10.0.21 及更高版本中得到修复。从带有下载链接的页面

2 - 修复了 Advantage .NET 数据提供程序中的一个错误,该错误导致某些语言环境(特别是 tr-TR)无法正确解析连接字符串。

于 2012-08-17T15:48:08.583 回答
1

哦,年,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在连接字符串中使用。我会询问客户系统中当前设置了哪种文化。

更新

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

于 2012-08-17T11:18:50.753 回答