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:路径中有非法字符。”