Код для создания базы членства ASP.Net - PullRequest
1 голос
/ 04 ноября 2011

Прежде, чем я сам напишу это, есть ли метод c #, плавающий вокруг, который создаст таблицы, sprocs и представления, которые устанавливаются aspnetregsql?

1 Ответ

6 голосов
/ 04 ноября 2011

Насколько я знаю, нет API, который бы делал это напрямую - инструмент aspnet_regsql.exe в любом случае просто ссылается на файлы скриптов на диске.

Для начала, как реализовать это самостоятельно:

Вы можете вручную выполнить aspnet_regsql.exe через Process.Start.

Или вы можете запустить программу из командной строки, с параметрами командной строки, чтобы выгрузить сценарий.Затем отредактируйте эти сценарии, чтобы они не зависели от БД (или не зависели от вас), сохраните эти сценарии как встроенные ресурсы в вашем приложении, извлеките их во время выполнения и используйте SqlConnection и ExecuteNonQuery для запуска этих сценариев в отношениибаза данных.

Вот параметры командной строки для aspnet_regsql.exe:

http://msdn.microsoft.com/en-us/library/ms229862(v=vs.80).aspx

Вот некоторый код, который я использовал для реализации второго параметра:

ExecuteSqlScriptResource("MyDb", "MyAssemblyName.Scripts.aspnet_regsql_add.sql");

// ...

static void ExecuteSqlScriptResource(string connectionName, string resourcePath)
{
    using (Stream scriptStream = Assembly.GetExecutingAssembly()
        .GetManifestResourceStream(resourcePath)
        )
    {
        if (scriptStream == null)
        {
            WriteLine(string.Format("Failed to open resource {0}", resourcePath));
            return;
        }

        using (
            var sqlConnection = new SqlConnection(
                ConfigurationManager
                    .ConnectionStrings[connectionName].ConnectionString
                )
            )
        {
            using (var streamReader = new StreamReader(scriptStream))
            {
                var svrConnection = new ServerConnection(sqlConnection);
                var server = new Server(svrConnection);
                server.ConnectionContext.ExecuteNonQuery(streamReader.ReadToEnd());
            }
        }
    }
}
...