15 Stimmen

Wie finde ich die aktuelle Version einer SQL Server-Datenbankanwendungsdatei?

Wir verwenden eine SQL Server Data-tier-Anwendung (dacpac oder DAC-Pack) und ich habe Schwierigkeiten, die aktuelle Version der Datenbank zu finden.

Gibt es eine Möglichkeit, die aktuelle Version mithilfe einer dieser Methoden zu erhalten:

  1. Von innerhalb des SQL Server Management Studios
  2. Über eine SQL-Anweisung
  3. Programmatisch mit .NET-Code

19voto

Mark Punkte 2841

Aus dem SQL Server Management Studio heraus

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

Um die Details einer DAC, die auf eine Instanz des Database Engine bereitgestellt wurde, anzuzeigen:

  1. Wählen Sie das Menü Ansicht/Objekt-Explorer.

  2. Verbinden Sie sich mit der Instanz aus dem Objekt-Explorer-Fenster.

  3. Wählen Sie das Menü Ansicht/Objekt-Explorer-Details.

  4. Wählen Sie den Serverknoten im Objekt-Explorer aus, der zur Instanz gehört, und navigieren Sie dann zum Knoten Verwaltung/Datenbankanwendungen.

  5. Die Listenansicht im oberen Abschnitt der Detailseite zeigt jede DAC, die auf die Instanz des Database Engine bereitgestellt wurde. Wählen Sie eine DAC aus, um die Informationen im Detailbereich am unteren Ende der Seite anzuzeigen.

Das Kontextmenü des Knotens "Datenbankanwendungen" wird auch verwendet, um eine neue DAC bereitzustellen oder eine vorhandene DAC zu löschen.

Über ein SQL-Statement

SELECT instance_name, type_version FROM msdb.dbo.sysdac_instances

Über ein SQL-Statement auf Azure

SELECT instance_name, type_version FROM master.dbo.sysdac_instances

Programmgesteuert mit .NET-Code

Beachten Sie, dass dies in DacFx 3.0 nicht mehr gültig ist. Lesen Sie meine andere Antwort, um zu sehen, wie es gemacht wird.

C

ServerConnection serverConnection;
string databaseName;

// Eine Verbindung mit der SQL Server-Instanz herstellen.
using (SqlConnection sqlConnection =
    new SqlConnection(ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString))
{
    serverConnection = new ServerConnection(sqlConnection);
    serverConnection.Connect();

    // Es wird angenommen, dass die Standarddatenbank in der Verbindungszeichenfolge die Datenbank ist, auf die wir abzielen.
    databaseName = sqlConnection.Database;
}

// Die DAC-Informationen abrufen.
DacStore dacstore = new DacStore(serverConnection);
var dacInstance = dacstore.DacInstances[databaseName];
System.Diagnostics.Debug.Print("Datenbank {0} hat Dac-Pack-Version {1}.", databaseName, dacInstance.Type.Version);

VB.NET

Dim serverConnection As ServerConnection
Dim databaseName As String

' Eine Verbindung mit der SQL Server-Instanz herstellen.
Using sqlConnection As New SqlConnection(ConfigurationManager.ConnectionStrings("DefaultConnection").ConnectionString)
    serverConnection = New ServerConnection(sqlConnection)
    serverConnection.Connect()

    ' Es wird angenommen, dass die Standarddatenbank in der Verbindungszeichenfolge die Datenbank ist, die wir abfragen möchten.
    databaseName = sqlConnection.Database
End Using

' Die DAC-Informationen abrufen.
Dim dacstore As New DacStore(serverConnection)
Dim dacInstance = dacstore.DacInstances(databaseName)
System.Diagnostics.Debug.Print("Datenbank {0} hat Dac-Pack-Version {1}.", databaseName, dacInstance.Type.Version)

0 Stimmen

Wie mache ich das programmgesteuert mit DacFx 3.0? Es gibt keine DacStore-Klasse mehr.

1 Stimmen

Sieht so aus, als ob das in Version 3.0 nicht möglich ist. Siehe stackoverflow.com/questions/18499866/…

3voto

Mark Punkte 2841

Im DacFx 3.0 ist der DacStore nicht mehr verfügbar. Um die Version aus dem C#-Code zu erhalten, müssen Sie die Datenbank abfragen. Hier ist ein Beispiel:

  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("Die Datenbank hat die DAC-Pack-Version {0}.", version);
      }
      catch (Exception ex)
      {
        Console.ForegroundColor = ConsoleColor.Red;
        Console.WriteLine(ex.Message);
        Console.WriteLine();
        Console.ResetColor();
      }
      Console.WriteLine("Drücken Sie eine beliebige Taste zum Beenden");
      Console.ReadKey(true);
    }

/// 
/// Ruft die Datenbankversion ab.
/// 
/// Die Verbindungszeichenfolge der zu abfragenden Datenbank.
/// True, wenn eine Azure-Datenbank abgefragt wird.
/// DAC-Pack-Version
private static string GetDatabaseVersion(string connectionString, bool isAzure)
{
  var connectionStringBuilder = new SqlConnectionStringBuilder(connectionString);
  string instanceName = connectionStringBuilder.InitialCatalog;
  string databaseToQuery = "msdb";
  if (isAzure)
  {
    // Auf Azure müssen wir mit der Master-Datenbank verbunden sein, um sysdac_instances abzufragen
    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;
  }
}

}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X