.NET4.0 SqlConnectionStringBuilder 缺少 ApplicationIntent 和 MultiSubnetFailover 属性

.NET4.0 SqlConnectionStringBuilder missing ApplicationIntent and MultiSubnetFailover properties

我有这个 .Net Framework 4.0 项目。我添加了 System.Data 作为参考。 我正在尝试使用 DbConnectionStringBuilder 构建连接字符串,而不是直接使用字符串。

        var mssqlcsb = new System.Data.SqlClient.SqlConnectionStringBuilder()
        {
            DataSource = @"(localdb)\MSSQLLocalDB",
            InitialCatalog = "test",
            IntegratedSecurity = true,
            ConnectTimeout = 30,
            Encrypt = false,
            TrustServerCertificate = true,
            //ApplicationIntent = ApplicationIntent.ReadWrite,
            //MultiSubnetFailover = false
        };

错误 代码:CS0117。说明:“SqlConnectionStringBuilder”不包含“ApplicationIntent”的定义。

正在查找 class 的元数据,解析为 C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework.NETFramework\v4.0\System .Data.dll, 确认没有这样的属性

但是,ApplicationIntentMSDNSqlConnectionStringBuilder 的 属性。 MultiSubnetFailover.

同样的问题

我是不是遗漏了什么,是 MSDN 遗漏了什么,还是 System.Data 遗漏了什么?

两者均可作为 属性 使用,但仅适用于 .NET 4.5 或更高版本。它在 .NET 4.0 中不存在。

你可以很容易地看到这一点。在 VS 中创建一个控制台应用程序项目。

将以下代码粘贴到 Main 方法中:

        SqlConnectionStringBuilder b = new SqlConnectionStringBuilder();
        b.ApplicationIntent = ApplicationIntent.ReadOnly;

转到项目设置并将 "Target Framework" 设置更改为以下任何一项(取决于您安装的内容和您使用的 VS 版本):

  • .NET Framework 4(=> 编译错误)
  • .NET Framework 4.5(编译)
  • .NET Framework 4.5.1(编译)
  • ...

您还可以通过查看 this 文档来了解:

The following connection properties were added to SqlClient in .NET Framework 4.5:

  • ApplicationIntent

如果可以,请将您的目标框架更改为 .NET 4.5 或更高版本(即您的应用程序的所有部署都支持这一点)。或者,作为解决方法,将这些属性手动添加到生成的连接字符串中:

 var mssqlcsb = new System.Data.SqlClient.SqlConnectionStringBuilder()
 ...
 string connectionString = mssqlcsb.ConnectionString + ";ApplicationIntent=ReadWrite";

"ApplicationIntent" 在 .net framework 4.0 中不可用,在 .Net 4.5 及更高版本中可用。

将您的应用程序框架版本切换到 .Net 4.5。