创建 ASP.Net 会员数据库的代码

发布于 2024-12-13 11:55:22 字数 61 浏览 0 评论 0原文

在我自己写这篇文章之前,是否有 ac# 方法可以创建由 aspnetregsql 安装的表、存储过程和视图?

Before I write this myself, is there a c# method out there floating around that will create the tables, sprocs, and views that get installed by aspnetregsql?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

尘世孤行 2024-12-20 11:55:22

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

如需了解如何自行实现此功能:

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

或者您可以从命令行运行该程序,并使用命令行选项转储脚本。然后将这些脚本编辑为与数据库无关(或不由您决定),将这些脚本存储为应用程序中的嵌入式资源,在运行时提取它们,并使用 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());
            }
        }
    }
}

As far as I know there is no API to do this directly - the aspnet_regsql.exe tool just references script files on disk anyhow.

For a head start on how to implement this yourself:

You can manually execute aspnet_regsql.exe via Process.Start.

Or you can run the program from the command line, with command line options to dump out the script. Then edit those scripts to be DB agnostic (or don't - up to you), store those scripts as embedded resources in your application, extract them at runtime, and use a SqlConnection and ExecuteNonQuery to run those scripts against a database.

Here are the command line options for aspnet_regsql.exe:

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

Here's some code I have used to implement the second option:

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());
            }
        }
    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文