我尝试在 PowerShell 中运行以下代码,但收到错误“不支持关键字:'DataSource'”。
using namespace System.Data.SqlClient
$builder = New-Object SqlConnectionStringBuilder
$builder.DataSource = "localhost"
环顾四周,当您尝试打开键设置为“DataSource”而不是正确的“Data Source”的连接时,会出现此错误。但我没有直接写入连接字符串,我只是尝试在 builder class 上设置属性。 .
问题是,当我在 C# 中运行等效项时,它工作得很好:
SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder();
builder.DataSource = "localhost";
我已经使用 builder.GetType().Assembly.Location 检查了程序集,它们都从同一个程序集加载(C:\Windows\Microsoft.NET\assembly\GAC_64\System.Data\v4.0_4 .0.0.0__b77a5c561934e089\System.Data.dll),那么为什么 PowerShell 尝试写入连接字符串而不是设置属性呢? PowerShell 5.1 和 7 中都会出现此问题
最佳答案
您在这里遇到的是 PowerShell 的字典适配器和 native .NET 成员适配器之间的冲突。
简而言之,SqlConnectionStringBuilder
类实现了 IDictionary
接口(interface),这反过来又导致 PowerShell 尝试处理属性访问(即 $builder.PropertyName
)作为索引操作(即 $builder['PropertyName']
)。
您可以使用底层目标键名称:
$builder.'Data Source' = 'localhost'
# or
$builder['Data Source'] = 'localhost'
...或者您可以通过与 psobject
成员集交互来绕过字典适配器:
$builder.psobject.Properties['DataSource'].Value = 'localhost'
关于c# - PowerShell 未在 SqlConnectionStringBuilder 上设置属性(适用于 C#),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76630125/