ArgumentException:连接字符串中无法识别的属性“用户 ID”

Posted

技术标签:

【中文标题】ArgumentException:连接字符串中无法识别的属性“用户 ID”【英文标题】:ArgumentException: Unrecognized property 'user id' in connection string 【发布时间】: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 【参考方案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。我会询问客户系统中当前设置了哪种文化。

更新

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

【讨论】:

以上是关于ArgumentException:连接字符串中无法识别的属性“用户 ID”的主要内容,如果未能解决你的问题,请参考以下文章

System.ArgumentException 路径中的非法字符

构造 ArgumentException 时如何以编程方式确定参数名称?

System.ArgumentException:初始化字符串的格式不符合从索引 0 开始的规范。3

带有 WinHttpHander() 的 gRPC “ArgumentException:路径中有非法字符。”

DotNet 5.0 IdnMapping.GetAscii 抛出 ArgumentException

idea springboot中整合jdbc连接MySQL中,Schemas中无mybatis怎么解决?