【问题标题】:ArgumentException: Unrecognized property 'user id' in connection stringArgumentException:连接字符串中无法识别的属性“用户 ID”
【发布时间】:2012-08-17 10:52:53
【问题描述】:

我正在使用:

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

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

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

只要相同的代码在所有其他客户中运行良好,我想问题可能与运行环境有关,但我仍在尝试找出究竟是什么导致了这个问题。

有什么想法吗?

更新

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

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

我猜StringComparer.CurrentCultureIgnoreCase 在这里可能有问题,但我需要检查一下。

【问题讨论】:

  • 你能发布连接字符串吗? (可以没有用户名/密码,以便我们可以看到格式)
  • @FedorHajdu 连接字符串很正常,看起来像:data source=\\server\db\system-1\maindb.add;servertype=Remote;user id=admin;password=***;TrimTrailingSpaces=true

标签: .net connection-string advantage-database-server


【解决方案1】:

此问题已在 9.10.0.21 及更高版本的客户端中得到修复。来自page with the download link

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

【讨论】:

  • 哦,太好了,谢谢!我以为我有最新的 9.* 版本。
【解决方案2】:

哦,年,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。我会询问客户系统中当前设置了哪种文化。

更新

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-17
    • 2013-01-29
    相关资源
    最近更新 更多