这是针对数据库课程中的一个项目,所以我试图避免像EF Code First这样的东西,让我假装数据库实际上并不存在,数据只是神奇地存在。
基本上我希望能够从SQL脚本中拆除并重新构建本地SQL Server CE数据库,作为项目中的构建步骤。我正在使用VS2012 express,这是一个WPF项目。理想情况下,IDE中的项目中可以看到一个SQL文件夹,其中包含按顺序运行的脚本。
我能找到的所有工具都可以帮助您避免编写SQL。关于我如何做到这一点的任何建议?
答案 0 :(得分:2)
您可以编写一些C#代码来读取目标文件夹的内容并对数据库执行它(使用纯粹的,简单的SqlCommands),然后将此代码放入MSBuild Task
,并将其添加到{ {1}} AfterBuild
的目标。
编辑:更好的是,使用预先存在的MSBuild包(比如http://www.natthompson.com/?p=183这个)来为你执行sql!
答案 1 :(得分:1)
或者,您可以将SQL文件的内容(一次一个)读入字符串,并使用简单的ADO.Net调用以编程方式对数据库执行它们。
您可以使用以下内容:
/// <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中的数据库。
答案 2 :(得分:0)
sqlcmd.exe(命令行实用程序)不适用于Sql Server CE (如果您使用的是完整版的Sql Server(或Sql Server Express),我将从sqlcmd.exe开始。)
所以这里有一个想法(也许)让你开始使用CE。请参阅以下网址。