C# SMO 数据库不记录创建
Posted
技术标签:
【中文标题】C# SMO 数据库不记录创建【英文标题】:C# SMO Database do not log creation 【发布时间】:2018-01-22 14:16:53 【问题描述】:我有一个创建Microsoft.SqlServer.Management.Smo.Database
类型数据库的集成测试:
var defaultConnectionConnectionString = ConfigurationManager.ConnectionStrings["DefaultConnection"].ToString();
var sqlConnection = new SqlConnection(defaultConnectionConnectionString);
var serverConnection = new ServerConnection(sqlConnection);
_server = new Server(serverConnection);
_database = new Database(_server, _integrationTestingDatabaseName);
_database.Create();
当我通过 CLI for NUnit 运行集成测试时,当测试完成时,用于创建数据库的 SQL 被转储到控制台。这会使输出变得混乱,这不是我在运行此集成测试时想要看到的。我怎样才能阻止这种情况发生?
【问题讨论】:
当我在控制台应用程序(VS2015/Smo 12.0)中运行上述内容时,我没有得到任何 SQL 输出。您是否也在控制台应用程序中看到相同的行为?仅在使用 NUnit CLI 运行时才会发生这种情况吗?事实上,对我来说,我希望看到生成的 SQL 被记录下来!另外,你的 Smo 程序集是什么版本? 您打算回答以上问题吗? 【参考方案1】:这是一场鹅追逐,无法复制。
我猜可能会有一些混乱,也许您的一个脚本会使用SQL Print
或类似的红鲱鱼。因为执行此单元测试以通过 Sql Management Objects 创建 SQL dB 并不输出 SQL 创建脚本。
即使直接从命令行执行也不会记录 SQL 创建脚本。这是再现:
using NUnit.Framework;
using ConsoleApplication1;
using System.IO;
using System.Diagnostics;
[TestFixture]
public class UnitTest1
static FileStream objStream;
[SetUp]
public static void Setup()
objStream = new FileStream(AppDomain.CurrentDomain.BaseDirectory + "\\AAA_Output.txt", FileMode.OpenOrCreate);
TextWriterTraceListener objTraceListener = new TextWriterTraceListener(objStream);
Trace.Listeners.Add(objTraceListener);
Trace.WriteLine("===================================");
Trace.WriteLine("App Start:" + DateTime.Now);
Trace.WriteLine("===================================");
[TestCase]
public void TestMethod1()
Program.CreateDB();
[TearDown]
public static void TearDown()
Trace.Flush();
objStream.Close();
结果:
【讨论】:
以上是关于C# SMO 数据库不记录创建的主要内容,如果未能解决你的问题,请参考以下文章
如何在 C# 中使用 SMO 使用 FILE STREAM 备份和恢复数据库
ScriptingOptions sql smo 不支持脚本数据