How do I find the current version of a SQL Server data-tier application?

前端 未结 2 728
没有蜡笔的小新
没有蜡笔的小新 2020-12-31 10:06

We are using a SQL Server Data-tier application (dacpac or DAC pack) and I\'m having a hard time finding the current version of the database.

Is there a way to obtai

相关标签:
2条回答
  • 2020-12-31 10:18

    In DacFx 3.0 the DacStore is no longer available. To get the version from C# code you need to query the database. Here's an example:

      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;
      }
    }
    

    }

    0 讨论(0)
  • 2020-12-31 10:33

    From within SQL Server Management Studio

    From http://msdn.microsoft.com/en-us/library/ee210574.aspx

    To view the details of a DAC deployed to an instance of the Database Engine:

    1. Select the View/Object Explorer menu.

    2. Connect to the instance of the from the Object Explorer pane.

    3. Select the View/Object Explorer Details menu.

    4. Select the server node in Object Explorer that maps to the instance, and then navigate to the Management\Data-tier Applications node.

    5. The list view in the top pane of the details page lists each DAC deployed to the instance of the Database Engine. Select a DAC to display the information in the detail pane at the bottom of the page.

    The right-click menu of the Data-tier Applications node is also used to deploy a new DAC or delete an existing DAC.

    Via a SQL statement

    SELECT instance_name, type_version FROM msdb.dbo.sysdac_instances
    

    Via a SQL statement on Azure

    SELECT instance_name, type_version FROM master.dbo.sysdac_instances
    

    Programmatically using .NET code

    Note that in DacFx 3.0 this is no longer valid. See my other answer for a way to do it.

    C#

    ServerConnection serverConnection;
    string databaseName;
    
    // Establish a connection to the SQL Server instance.
    using (SqlConnection sqlConnection =
        new SqlConnection(ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString))
    {
        serverConnection = new ServerConnection(sqlConnection);
        serverConnection.Connect();
    
        // Assumes default database in connection string is the database we are trying to query.
        databaseName = sqlConnection.Database;
    }
    
    // Get the DAC info.
    DacStore dacstore = new DacStore(serverConnection);
    var dacInstance = dacstore.DacInstances[databaseName];
    System.Diagnostics.Debug.Print("Database {0} has Dac pack version {1}.", databaseName, dacInstance.Type.Version);
    

    VB.NET

    Dim serverConnection As ServerConnection
    Dim databaseName As String
    
    ' Establish a connection to the SQL Server instance.
    Using sqlConnection As New SqlConnection(ConfigurationManager.ConnectionStrings("DefaultConnection").ConnectionString)
        serverConnection = New ServerConnection(sqlConnection)
        serverConnection.Connect()
    
        ' Assumes default database in connection string is the database we are trying to query.
        databaseName = sqlConnection.Database
    End Using
    
    ' Get the DAC info.
    Dim dacstore As New DacStore(serverConnection)
    Dim dacInstance = dacstore.DacInstances(databaseName)
    System.Diagnostics.Debug.Print("Database {0} has Dac pack version {1}.", databaseName, dacInstance.Type.Version)
    
    0 讨论(0)
提交回复
热议问题