【问题标题】:Threading + Unit Test + SqlConnection calls is not working. It works fine not using threading线程 + 单元测试 + SqlConnection 调用不起作用。不使用线程可以正常工作
【发布时间】:2011-08-08 17:08:57
【问题描述】:

主要思想是我想同时调用 4 个不同的数据库,而不是一次调用一个。所以我正在使用线程,当它尝试打开 sql 连接时,我得到:

无法计算表达式,因为代码已优化或 本机框架位于调用堆栈的顶部

有什么想法吗? (如果与它有任何关系,这是从 VS 单元测试运行的)

using System;
using System.Data.SqlClient;
using System.Threading;
using Manual101.BLLDAL;

namespace Manual101.BLL
{
    public class AgencySender
    {
        private CourtCase localcc;
        private string connectionString = xxx; 
        public AgencySender(CourtCase cc)
        {
            this.localcc = cc;
        }

        public void SendOAG()
        {
            try
            {
                string queryString = "select JustisId from ReviewFilingCallbackMessage";

                using (SqlConnection connection =
                       new SqlConnection(connectionString))
                {
                    SqlCommand command = connection.CreateCommand();
                    command.CommandText = queryString;

                    connection.Open();

                    using (SqlDataReader reader = command.ExecuteReader())
                    {
                        if (reader.HasRows)
                        {
                            while (reader.Read())
                            {
                                var x = reader["JustisId"].ToString();
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                // log errors
            }
        }
    }

    public class AgencySenderHelper
    {
        private string connectionString = xxx    
        public void SendData(CourtCase cc)
        {
            //  AgencySender ags = new AgencySender(cc);
            //  ags.SendOAG();

            AgencySender ags = new AgencySender(cc);
            Thread thread = new Thread(new ThreadStart(ags.SendOAG));
            thread.Start();
        }
    }
}

【问题讨论】:

  • 发布完整的堆栈跟踪。另外,这个有内部异常吗?
  • 堆栈上没有任何东西......如果我删除了try catch,那么它不会给出错误..它似乎在connection.Open()之后停止执行;
  • 如果您连接 sql-profiler,您是否可以看到正在执行的查询,即使代码似乎挂起?哦,请发布完整的测试。
  • 确保您正在编译 DEBUG 版本而不是发布版本。检查项目设置'build'选项卡并确保选中了DEBUG复选框。
  • 我最终只是创建了一个控制台项目,现在它工作正常......:\

标签: c# multithreading unit-testing sqlconnection


【解决方案1】:

确保在单元测试中等待线程终止。如果您生成一堆线程并让主线程终止,则 MSTest 进程将结束所有生成的线程。在这种情况下,您通常会遇到奇怪的异常。

最简单的做法是在您创建的所有线程上调用 Thread.Join()。

【讨论】:

    猜你喜欢
    • 2017-04-06
    • 1970-01-01
    • 2021-08-07
    • 2020-04-30
    • 1970-01-01
    • 2020-10-06
    • 2013-03-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多