2

这是针对数据库课程中的一个项目,所以我试图避免使用 EF Code First 之类的东西,让我假装数据库实际上并不存在,而数据只是神奇地持续存在。

基本上,我希望能够从 SQL 脚本中拆除并重新构建本地 SQL Server CE 数据库,作为项目中的构建步骤。我正在使用 VS2012 express,它是一个 WPF 项目。理想情况下,从 IDE 的项目中可以看到一个 SQL 文件夹,其中包含按顺序运行的脚本。

我所能找到的只是帮助您避免编写 SQL 的工具。关于我如何做到这一点的任何建议?

4

3 回答 3

2

您可以编写一些 C# 代码来读取目标文件夹的内容并针对数据库执行它(使用纯粹的、简单的 SqlCommands),然后将此代码放入 MSBuildTask中,并将其添加到AfterBuild您的csproj.

编辑:更好的是,使用预先存在的 MSBuild 包(如http://www.natthompson.com/?p=183这个)为您执行 sql!

于 2012-09-28T18:06:37.207 回答
1

或者,您可以将 SQL 文件的内容(一次一个)读入字符串,并使用简单的 ADO.Net 调用以编程方式对 DB 执行它们。

你可以使用这样的东西:

    /// <summary>
    /// This method internally uses the ExecuteNonQuery method of the SqlCommand object
    /// to run a query that returns no values (updates/inserts/deletes).
    /// </summary>
    /// <param name="sql">The SQL to execute</param>
    /// <param name="parameters">The SqlParameters to use (pass null if there are none)</param>
    /// <remarks>This method is thread safe.</remarks>
    public static void runNonQuery(string sql, IList<SqlParameter> parameters, string dbConnectionString)
    {
        // Old-school, using simple ADO.Net to run a non-query (updates/inserts/deletes) - KDR
        try
        {
            Monitor.Enter(_lock);
            using (SqlConnection conn = new SqlConnection(dbConnectionString))
            {
                using (System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand())
                {
                    conn.Open();
                    cmd.Connection = conn;
                    cmd.CommandType = CommandType.Text;
                    cmd.CommandText = sql;

                    if (parameters != null && parameters.Count() != 0)
                    {
                        foreach (SqlParameter param in parameters)
                        {
                            cmd.Parameters.Add(param);
                        }
                    }
                    cmd.ExecuteNonQuery();
                }
                if (conn.State != ConnectionState.Closed) { conn.Close(); }
            }
        }
        finally
        {
            Monitor.Exit(_lock);
        }
    }

只需在字符串 sql 中传递 SQL 脚本文件的内容,为参数列表传递 null,然后在 dbConnectionString 中将连接字符串传递给您的数据库。

于 2012-09-28T18:46:01.040 回答
0

sqlcmd.exe(命令行实用程序)不适用于 Sql Server CE。
(如果您使用的是完整版 Sql Server(或 Sql Server Express),我将从 sqlcmd.exe 开始。)

所以这是一个(也许)让你开始使用 CE 的想法。请参阅下面的网址。

http://blogs.msdn.com/b/stevelasker/archive/2007/03/31/creating-your-sql-server-compact-edition-database-and-schema-in-code.aspx

于 2012-10-01T15:52:06.007 回答