Насколько я знаю, нет 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());
}
}
}
}