PowerShell未在SqlConnectionStringBuilder上设置属性(适用于C#)

sqyvllje  于 2023-08-05  发布在  Shell
关注(0)|答案(1)|浏览(108)

我试图在PowerShell中运行下面的代码,并获得错误“关键字不支持:“数据源”。

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中都会出现

mzmfm0qo

mzmfm0qo1#

您在这里遇到的是PowerShell的字典适配器和本机.NET成员适配器之间的冲突。
简而言之,SqlConnectionStringBuilder类实现了IDictionary接口,这反过来又会导致PowerShell尝试处理属性访问(即$builder.PropertyName)作为索引操作(即,$builder['PropertyName'])。
您可以使用基础目标键名称:

$builder.'Data Source' = 'localhost'
# or 
$builder['Data Source'] = 'localhost'

字符串
...或者您可以通过与psobject成员集交互来绕过字典适配器:

$builder.psobject.Properties['DataSource'].Value = 'localhost'

相关问题