You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell无法设置SqlConnectionStringBuilder属性(C#可正常运行)

问题重现

在PowerShell中运行以下代码时,收到错误提示:Keyword not supported: 'DataSource'

using namespace System.Data.SqlClient

$builder = New-Object SqlConnectionStringBuilder
$builder.DataSource = "localhost"

而等价的C#代码可以正常运行:

SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder();
builder.DataSource = "localhost";

经检查,两者加载的是同一个程序集C:\Windows\Microsoft.NET\assembly\GAC_64\System.Data\v4.0_4.0.0.0__b77a5c561934e089\System.Data.dll。

原因分析

SqlConnectionStringBuilder继承自DbConnectionStringBuilder,后者实现了IDictionary接口。PowerShell的动态成员访问机制会优先将实现IDictionary的对象的点运算符(.)解析为字典的键索引(即等同于$builder["DataSource"]),而非直接访问.NET强类型的DataSource属性。

连接字符串的有效键是Data Source而非DataSource,因此PowerShell尝试添加无效键时触发了错误。而C#作为强类型语言,会直接编译为访问DataSource属性——该属性内部会自动映射到连接字符串的Data Source键,因此不会出错。

解决方案

可以通过以下几种方式强制PowerShell访问.NET强类型属性:

  • 通过PSObject.Properties访问属性
$builder.PSObject.Properties['DataSource'].Value = "localhost"
  • 强制类型转换后访问属性
([SqlConnectionStringBuilder]$builder).DataSource = "localhost"
  • 使用Set-ItemProperty cmdlet
Set-ItemProperty -InputObject $builder -Name DataSource -Value "localhost"

内容的提问来源于stack exchange,提问作者JTDotNet

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 09:57:25