0

我正在为我创建的与数据库交互的一些函数创建一个单元测试。我有一些我计划在这些单元测试中使用的数据库的设置和拆卸代码。现在有趣的是,这段代码在 WinForms、控制台、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);
    }
  }
}
4

0 回答 0