C# 如何在测试运行之前创建新的数据库?
如何创建新数据库(每次)在从架构文件运行测试之前?删除整个数据库-不要逐表删除-这会增加太多的维护开销删除整个数据库-不要逐表删除-这会增加太多的维护开销我使用以下实用程序方法运行SQL脚本来设置数据库和测试我时不时处理的项目中的数据。它相当有效:C# 如何在测试运行之前创建新的数据库?,c#,.net,sql,nhibernate,C#,.net,Sql,Nhibernate,如何创建新数据库(每次)在从架构文件运行测试之前?删除整个数据库-不要逐表删除-这会增加太多的维护开销删除整个数据库-不要逐表删除-这会增加太多的维护开销我使用以下实用程序方法运行SQL脚本来设置数据库和测试我时不时处理的项目中的数据。它相当有效: internal static void RunScriptFile(SqlConnection conn, string fileName) { long fileSize = 0; using (FileStream stream
internal static void RunScriptFile(SqlConnection conn, string fileName)
{
long fileSize = 0;
using (FileStream stream = File.OpenRead(fileName))
{
fileSize = stream.Length;
using (StreamReader reader = new StreamReader(stream))
{
StringBuilder sb = new StringBuilder();
string line = string.Empty;
while (!reader.EndOfStream)
{
line = reader.ReadLine();
if (string.Compare(line.Trim(), "GO", StringComparison.InvariantCultureIgnoreCase) == 0)
{
RunCommand(conn, sb.ToString());
sb.Length = 0;
}
else
{
sb.AppendLine(line);
}
}
}
}
}
private static void RunCommand(SqlConnection connection, string commandString)
{
using (SqlCommand command = new SqlCommand(commandString, connection))
{
try
{
command.ExecuteNonQuery();
}
catch (Exception ex)
{
Console.WriteLine(string.Format("Exception while executing statement: {0}", commandString));
Console.WriteLine(ex.ToString());
}
}
}
我已经使用生成SQL脚本(在某些情况下编辑它们以仅包含我想在测试中使用的数据),并在测试之前将脚本文件路径传递到RunScriptFile
方法中。该方法解析脚本文件,并分别执行由GO
行分隔的每个部分(我发现这大大有助于排除运行SQL脚本时发生的错误)
我写代码已经有一段时间了,但我认为它需要脚本文件以
GO
行结尾,以便执行它的最后一部分。我使用以下实用程序方法来运行SQL脚本,以便在我不时处理的项目中设置数据库和测试数据。它相当有效:
internal static void RunScriptFile(SqlConnection conn, string fileName)
{
long fileSize = 0;
using (FileStream stream = File.OpenRead(fileName))
{
fileSize = stream.Length;
using (StreamReader reader = new StreamReader(stream))
{
StringBuilder sb = new StringBuilder();
string line = string.Empty;
while (!reader.EndOfStream)
{
line = reader.ReadLine();
if (string.Compare(line.Trim(), "GO", StringComparison.InvariantCultureIgnoreCase) == 0)
{
RunCommand(conn, sb.ToString());
sb.Length = 0;
}
else
{
sb.AppendLine(line);
}
}
}
}
}
private static void RunCommand(SqlConnection connection, string commandString)
{
using (SqlCommand command = new SqlCommand(commandString, connection))
{
try
{
command.ExecuteNonQuery();
}
catch (Exception ex)
{
Console.WriteLine(string.Format("Exception while executing statement: {0}", commandString));
Console.WriteLine(ex.ToString());
}
}
}
我已经使用生成SQL脚本(在某些情况下编辑它们以仅包含我想在测试中使用的数据),并在测试之前将脚本文件路径传递到RunScriptFile
方法中。该方法解析脚本文件,并分别执行由GO
行分隔的每个部分(我发现这大大有助于排除运行SQL脚本时发生的错误)
我写代码已经有一段时间了,但我认为它需要脚本文件以
GO
行结尾,以便执行它的最后一部分。您可以使用NHibernate中的SchemaExport类在代码中执行此操作:
var schema = new SchemaExport(config);
schema.Drop(true, true);
schema.Execute(true, true, false);
您可以使用NHibernate中的SchemaExport类在代码中执行此操作:
var schema = new SchemaExport(config);
schema.Drop(true, true);
schema.Execute(true, true, false);
看看这些帖子 Ayende Rahien-
斯科特·穆克-
我发现它们非常有用,基本上他们是在扩展Mike Glenn的示例,看看这些帖子 Ayende Rahien-
斯科特·穆克- 我发现它们非常有用,基本上它们是在扩展Mike Glenn的示例我使用Proteus(单元测试实用程序),可在Google代码中找到: 您可以创建一组数据。每次运行单元测试时,都会保存当前数据,加载数据集,然后始终使用同一组数据进行测试。最后恢复原始数据 非常有力 HTH我使用Proteus(单元测试实用程序),可在谷歌代码中找到: 您可以创建一组数据。每次运行单元测试时,都会保存当前数据,加载数据集,然后始终使用同一组数据进行测试。最后恢复原始数据 非常有力
HTH有无NHibernate?你给它贴上了NHibernate标签,但在问题中没有提到它,有没有NHibernate?您用NHibernate标记了它,但在问题
schema中没有提到它。Drop(true,true)
是不需要的,因为Execute总是在创建schema之前删除。Drop(true,true)
是不需要的,因为Execute总是在创建schema之前删除