我正在为我创建的与数据库交互的一些函数创建单元测试。我有一些设置和拆除代码,我计划在这些单元测试中使用的数据库。现在有趣的部分是这个代码在WinForms,Console,DLL库中正确执行,但是当在单元测试中执行代码时,我在尝试运行ExecuteNonQuery()命令时得到一个有趣的异常。
[Outer Exception]
Exception has been thrown by the target of invocation
[Inner Exception]
The C++ module failed to load during appdomain initialization. \n
在我的异常中进一步挖掘后,我发现了以下内在的异常:
Unable to load DLL 'MSVCR80.dll": The specfiied module could not be found ... The C++ module fialed to load during appdomain initialization.
查看堆栈跟踪时,您会发现:
"at Microsoft.SqlServer.Management.Common.ExecuteBatch.GetStatements(String sqlCommand)
现在我要承认我在这里有点头脑,所以如果有人能解释为什么在作为UnitTest的一部分执行时抛出这个异常并且修复它的方法会很棒!
private static void ExecSql(string sql, string connectionString)
{
using (SqlConnection conn = new SqlConnection(connectionString))
{
try
{
conn.Open();
Server server = new Server(new ServerConnection(conn));
server.ConnectionContext.ExecuteNonQuery(sql);
server.ConnectionContext.Disconnect();
//MessageBox.Show("Script Executed.");
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
}