#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: Рад, что это помогло. Если ответ решил вашу проблему, пожалуйста, отметьте его как принятый (галочка в левом верхнем углу ответа).