2

これはデータベースコースのプロジェクト用であるため、データベースが実際には存在せず、データが魔法のように存続するふりをするEFコードファーストのようなものを避けようとしています。

基本的に、プロジェクトのビルドステップとして、SQLスクリプトからローカルのSQLServerCEデータベースを破棄して再構築できるようにしたいと考えています。私はVS2012Expressを使用していますが、これはWPFプロジェクトです。理想的には、IDEからプロジェクトに表示される単一のSQLフォルダーがあり、そこには順番に実行されるスクリプトが含まれています。

私が見つけたのは、SQLの記述を回避するのに役立つツールだけです。私がこれをどのように行うかについての提案はありますか?

4

3 に答える 3

2

ターゲットフォルダーの内容を読み取り、データベースに対して実行するC#コードを記述し(純粋で単純なSqlCommandsを使用)、このコードをMSBuildに配置して、のターゲットにTask追加することができます。AfterBuildcsproj

編集:さらに良いことに、既存のMSBuildパック(http://www.natthompson.com/?p=183これなど)を使用してSQLを実行してください!

于 2012-09-28T18:06:37.207 に答える
1

または、SQL ファイルの内容を (一度に 1 つずつ) 文字列に読み取り、単純な 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(コマンドラインユーティリティ)は、SQLServerCEでは機能しません。
(フルエディションのSQL Server(またはSQL Server Express)を使用している場合は、sqlcmd.exeから始めます。)

それで、ここに(多分)CEを使い始めるためのアイデアがあります。以下のURLを参照してください。

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 に答える