Как я могу программно опубликовать проект базы данных SQL Server?



Рассмотрим следующую ситуацию:



Теперь у меня есть приложение C#, которое анализирует файл, чтобы получить сведения (таблицы, столбцы и т. д.), и запускает новое соединение SQL, чтобы выполнить команду SQL для создания этих таблиц в базе данных.



Я хочу создать проект SQL, в котором я буду вручную создавать эти таблицы, и из приложения C# я хочу программно опубликовать проект SQL на определенном сервере и базе данных.



Возможно ли это ?

564   2  

2 ответов:

Если вы используете проект на основе sqlproj в .NET 4 и выше, вы можете построить и опубликовать его программно довольно легко, используя классы в Microsoft.Построить пространство имен. Взято из моего ответа здесь :

using Microsoft.Build.Framework;
using Microsoft.Build.Execution;

public void UpdateSchema() {
    var props = new Dictionary<string, string> {
        { "UpdateDatabase", "True" },
        { "PublishScriptFileName", "schema-update.sql" },
        { "SqlPublishProfilePath", "path/to/publish.xml") }
    };

    var projPath = "path/to/database.sqlproj";

    var result = BuildManager.DefaultBuildManager.Build(
        new BuildParameters { Loggers = new[] { new ConsoleLogger() } },
        new BuildRequestData(new ProjectInstance(projPath, props, null), new[] { "Publish" }));

    if (result.OverallResult == BuildResultCode.Success) {
        Console.WriteLine("Schema update succeeded!");
    }
    else {
        Console.ForegroundColor = ConsoleColor.Red;
        Console.WriteLine("Schema update failed!");
        Console.ResetColor();
    }
}

private class ConsoleLogger : ILogger
{
    public void Initialize(IEventSource eventSource) {
        eventSource.ErrorRaised += (sender, e) => {
            Console.ForegroundColor = ConsoleColor.Red;
            Console.WriteLine(e.Message);
            Console.ResetColor();
        };
        eventSource.MessageRaised += (sender, e) => {
            if (e.Importance != MessageImportance.Low)
                Console.WriteLine(e.Message);
        };
    }
    public void Shutdown() { }
    public LoggerVerbosity Verbosity { get; set; }
    public string Parameters { get; set; }
}

Это для .NET 4 и выше. Обязательно включите ссылки на сборку в Microsoft.Сборка и Microsoft.Строить.Рамки .

Есть несколько способов, которыми вы можете это сделать. В нашем приложении (~ 7 больших баз данных) мы управляем ими всеми с помощью проектов баз данных из SQL Server Data Tools. Это позволило нам легко управлять версиями, а также делать некоторые удивительные инструменты сравнения во время развертывания и множество других опций. Мы расширили наш, чтобы иметь дело с некоторыми нюансами в нашей среде, но для большинства людей это не должно быть проблемой.

Часть этого набора инструментов включает DAC (приложения уровня данных) что позволяет довольно легко переносить базу данных, которая находится в вашем проекте, в различные среды. Это позволило бы поддержать подавляющее большинство существующих сегодня проектов.

Если вы хотите перейти к чистой программистике, вы можете сначала использовать код (и Code First Migrations , что довольно гладко), который является своего рода сборкой, и MS выяснит остальное для вас (в основном по соглашению, но гибкость, чтобы выйти за его пределы). Это очень удобно, когда речь заходит об обновлении версий. Опять ИМХО.

Проекты баз данных также существуют, но, как правило, требуют немного больше понимания/работы, чтобы настроить их так, как вы хотите (но также предлагают знакомый макет типа SQL Explorer).

Comments

    Ничего не найдено.