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

标签 c# .net powershell sqlclient

我尝试在 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/

相关文章:

.net - 在文件保存时重新加载 Suave 应用程序

xml - 如何让 Powershell 更快地解析 XML 或进一步优化我的脚本?

Powershell:为什么 (gci c:\ddd).count on an Empty 文件夹不返回 0

c# - 泛指校验的快速算法

c# - 编码 CDATA 元素的有效方法

.net - 使用InstallUtil并静默设置Windows服务登录用户名/密码

powershell - powershell 在什么情况下会在管道中展开项目?

c# - 从数据点导出曲线

c# - 根据 View 中的预期设置模型

c# - 从 iPhone 保存计算机可访问的文件