用于创建ASP.Net成员资格数据库的代码

时间:2011-11-04 17:07:54

标签: c# asp.net sql-server asp.net-membership

在我自己编写之前,是否有一个c#方法在那里浮动,将创建由aspnetregsql安装的表,sprocs和视图?

1 个答案:

答案 0 :(得分:6)

据我所知,没有API可以直接执行此操作 - aspnet_regsql.exe工具无论如何都会引用磁盘上的脚本文件。

如何自己实现这个目标:

您可以通过aspnet_regsql.exe手动执行Process.Start

或者您可以从命令行运行该程序,使用命令行选项来转储脚本。然后将这些脚本编辑为与数据库无关(或不 - 由您自己决定),将这些脚本作为嵌入式资源存储在应用程序中,在运行时提取它们,并使用SqlConnectionExecuteNonQuery运行那些针对数据库的脚本。

以下是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());
            }
        }
    }
}