Sql server 2008 r2 如何查找SQL Server数据层应用程序的当前版本?

Sql server 2008 r2 如何查找SQL Server数据层应用程序的当前版本?,sql-server-2008-r2,data-tier-applications,Sql Server 2008 R2,Data Tier Applications,我们使用的是SQL Server数据层应用程序dacpac或DAC pack,我很难找到数据库的当前版本 是否有办法使用以下任何一种方法获取当前版本: 从SQLServerManagementStudio内部 通过SQL语句 以编程方式使用.NET代码 从SQLServerManagementStudio内部 从 要查看部署到数据库引擎实例的DAC的详细信息,请执行以下操作: 选择“视图/对象资源管理器”菜单 从对象资源管理器窗格连接到的实例 选择“视图/对象资源管理器详细信息”菜单 在对象资源

我们使用的是SQL Server数据层应用程序dacpac或DAC pack,我很难找到数据库的当前版本

是否有办法使用以下任何一种方法获取当前版本:

从SQLServerManagementStudio内部 通过SQL语句 以编程方式使用.NET代码 从SQLServerManagementStudio内部 从

要查看部署到数据库引擎实例的DAC的详细信息,请执行以下操作:

选择“视图/对象资源管理器”菜单

从对象资源管理器窗格连接到的实例

选择“视图/对象资源管理器详细信息”菜单

在对象资源管理器中选择映射到实例的服务器节点,然后导航到管理\数据层应用程序节点

详细信息页面顶部窗格中的列表视图列出部署到数据库引擎实例的每个DAC。选择DAC以在页面底部的详细信息窗格中显示信息

数据层应用程序节点的右键单击菜单也用于部署新的DAC或删除现有DAC

通过SQL语句 通过Azure上的SQL语句 以编程方式使用.NET代码 请注意,在DacFx 3.0中,这不再有效。请看我的另一个答案,以了解如何做到这一点

C 服务器连接服务器连接; 字符串数据库名; //建立与SQL Server实例的连接。 使用SqlConnection-SqlConnection= 新建SQLConnectionConfiguration Manager.ConnectionString[DefaultConnection].ConnectionString { serverConnection=新的ServerConnectionsqlConnection; serverConnection.Connect; //假设连接字符串中的默认数据库是我们试图查询的数据库。 databaseName=sqlConnection.Database; } //获取DAC信息。 DacStore DacStore=新的DacStoreserverConnection; var dacInstance=dacstore.DacInstances[databaseName]; System.Diagnostics.Debug.PrintDatabase{0}具有Dac包版本{1}.,databaseName,dacInstance.Type.version; VB.NET 将服务器连接设置为服务器连接 将数据库名称设置为字符串 '建立与SQL Server实例的连接。 将sqlConnection用作新的SQLConnectionConfiguration Manager.ConnectionStringsDefaultConnection.ConnectionString serverConnection=新的ServerConnectionsqlConnection 服务器连接。连接 '假定连接字符串中的默认数据库是我们尝试查询的数据库。 databaseName=sqlConnection.Database 终端使用 '获取DAC信息。 Dim dacstore作为新的DacStoreserverConnection Dim dacInstance=dacstore.DacInstancesdatabaseName System.Diagnostics.Debug.PrintDatabase{0}具有Dac包版本{1}、databaseName、dacInstance.Type.version
在DacFx 3.0中,DacStore不再可用。要从C代码中获取版本,需要查询数据库。下面是一个例子:

  using System;
  using System.Data;
  using System.Data.SqlClient;

  class Program
  {
    static void Main()
    {
      try
      {
        string version = GetDatabaseVersion(@"Initial Catalog=xxx;Data Source=yyy;Integrated Security=True;Pooling=False", false);
        Console.WriteLine("Database has DAC pack version {0}.", version);
      }
      catch (Exception ex)
      {
        Console.ForegroundColor = ConsoleColor.Red;
        Console.WriteLine(ex.Message);
        Console.WriteLine();
        Console.ResetColor();
      }
      Console.WriteLine("Press any key to exit");
      Console.ReadKey(true);
    }

/// <summary>
/// Gets the database version.
/// </summary>
/// <param name="connectionString">The connection string of database to query.</param>
/// <param name="isAzure">True if we are querying an Azure database.</param>
/// <returns>DAC pack version</returns>
private static string GetDatabaseVersion(string connectionString, bool isAzure)
{
  var connectionStringBuilder = new SqlConnectionStringBuilder(connectionString);
  string instanceName = connectionStringBuilder.InitialCatalog;
  string databaseToQuery = "msdb";
  if (isAzure)
  {
    // On Azure we must be connected to the master database to query sysdac_instances
    connectionStringBuilder.InitialCatalog = "Master";
    databaseToQuery = "master";
  }

  string query = String.Format("select type_version from {0}.dbo.sysdac_instances WHERE instance_name = '{1}'", databaseToQuery, instanceName);
  using (var connection = new SqlConnection(connectionStringBuilder.ConnectionString))
  {
    connection.Open();
    SqlCommand command = connection.CreateCommand();
    command.CommandText = query;
    command.CommandTimeout = 15;
    command.CommandType = CommandType.Text;
    var version = (string)command.ExecuteScalar();
    return version;
  }
}

}

如何使用DacFx 3.0以编程方式完成此操作?没有更多的DacStore类。看起来这在3.0中是不可能的。看见
SELECT instance_name, type_version FROM master.dbo.sysdac_instances
  using System;
  using System.Data;
  using System.Data.SqlClient;

  class Program
  {
    static void Main()
    {
      try
      {
        string version = GetDatabaseVersion(@"Initial Catalog=xxx;Data Source=yyy;Integrated Security=True;Pooling=False", false);
        Console.WriteLine("Database has DAC pack version {0}.", version);
      }
      catch (Exception ex)
      {
        Console.ForegroundColor = ConsoleColor.Red;
        Console.WriteLine(ex.Message);
        Console.WriteLine();
        Console.ResetColor();
      }
      Console.WriteLine("Press any key to exit");
      Console.ReadKey(true);
    }

/// <summary>
/// Gets the database version.
/// </summary>
/// <param name="connectionString">The connection string of database to query.</param>
/// <param name="isAzure">True if we are querying an Azure database.</param>
/// <returns>DAC pack version</returns>
private static string GetDatabaseVersion(string connectionString, bool isAzure)
{
  var connectionStringBuilder = new SqlConnectionStringBuilder(connectionString);
  string instanceName = connectionStringBuilder.InitialCatalog;
  string databaseToQuery = "msdb";
  if (isAzure)
  {
    // On Azure we must be connected to the master database to query sysdac_instances
    connectionStringBuilder.InitialCatalog = "Master";
    databaseToQuery = "master";
  }

  string query = String.Format("select type_version from {0}.dbo.sysdac_instances WHERE instance_name = '{1}'", databaseToQuery, instanceName);
  using (var connection = new SqlConnection(connectionStringBuilder.ConnectionString))
  {
    connection.Open();
    SqlCommand command = connection.CreateCommand();
    command.CommandText = query;
    command.CommandTimeout = 15;
    command.CommandType = CommandType.Text;
    var version = (string)command.ExecuteScalar();
    return version;
  }
}