Код для создания ASP.Net база данных членства

#c# #asp.net #sql-server #asp.net-membership

#c# #asp.net #sql-сервер #asp.net-членство

Вопрос:

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

Ответ №1:

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

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

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

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

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

http://msdn.microsoft.com/en-us/library/ms229862 (v = против 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());
            }
        }
    }
}
  

Комментарии:

1. -sqlexportlonly <имя файла> БАМ! привет, сэр

2. @andrew: Действительно 🙂 Это не зависит от базы данных, если это вас беспокоит. Я отредактировал этот файл вручную. Если вам нужен какой-то объединенный код для выполнения этого сценария, я могу предоставить его вам позже сегодня. Около 10-15 строк.

3. @andrew: Рад, что это помогло. Если ответ решил вашу проблему, пожалуйста, отметьте его как принятый (галочка в левом верхнем углу ответа).