c# - 在 C# 中不使用 ODBC.DataReader 将数据传递给另一个类

标签 c# multithreading datareader

我正在尝试制作一个多线程程序,从另一家公司持有的服务器中提取大量数据线程。目前,一旦一个线程提取了数据,它就会使用 OdbcDataReader 来读取该数据。但最终,我想做的是将该数据传递给另一个不同的线程,该线程将使用读取器读取和解析数据,以便当前线程可以继续从数据库中提取更多数据。

目前这里是线程的代码,直到读者点。

public class plexThread
    {
        OdbcConnection connection;
        OdbcCommand command;
        string sqlStatement;
        OdbcDataReader reader;
        string threadNumber;
        DateTime startDate;
        DateTime endDate;

        public plexThread(string threadNumber)
        {
            connection = new OdbcConnection("XXXX");
            this.threadNumber = threadNumber;
        }

        public void plexthread()
        {            
            try
            {
                connection.Open();
                startDate = ThreadInfo.useStartDate();
                endDate = ThreadInfo.getEndDate();
                DateTime timerStart = new DateTime();
                DateTime now = DateTime.Now;
                int timeout = 0;
                bool dataCaptured;

                while (startDate <= endDate)
                {
                    dataCaptured = false;
                    DateTime startDatePlusDay = startDate.AddDays(+1);
                    Console.WriteLine("Thread" + threadNumber + " is picking up day: " + startDate);
                    string startDateString = startDate.ToString("yyyy-MM-dd");
                    string startDatePlusDayString = startDatePlusDay.ToString("yyyy-MM-dd");
                    sqlStatement = "call sprocXXXX(null, null, '" + startDateString + "', '" + startDatePlusDayString + "', null, null,null,null,'',null,null,null,null,null,null,'', 164407);";
                    command = new OdbcCommand(sqlStatement, connection);

                    while (dataCaptured == false)
                    {
                        if (timeout <= 5)
                        {
                            try
                            {
                                reader = command.ExecuteReader();
                                int fieldCount = reader.VisibleFieldCount;
                                while (reader.Read())
                                {
                                    for (int i = 0; i < fieldCount; i++)
                                    {                                       
                                        string data = reader[i].ToString();
                                    }

不确定最好的方法是什么?

最佳答案

始终进行线程安全编程。现在,通过提供线程安全的集合,Microsoft 使开发人员的工作变得更加轻松。

参见:MSDN- Thread-Safe Collections

例如,一个线程可以不断向集合中添加数据,它可能是ConcurrentQueue<T> , ConcurrentBag<T> , BlockingCollection<T> , ETC。 其他线程可以继续读取它。

关于c# - 在 C# 中不使用 ODBC.DataReader 将数据传递给另一个类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29689529/

相关文章:

c# - 将查询结果显示为以逗号分隔的文字

c# - 如何隐藏 power bi 报告的过滤器部分?

c# - mvc ajax表单发布空列表问题

c# - 如何使用 Visual Studio 2019 社区创建 .NET Core 3 控制台应用程序?

java - 在java中两个独立的连续任务之间共享单个线程的最佳方法是什么

c++ - 如何在初始化列表中锁定互斥量?

c# - 使用 MySQL 数据填充 ArrayList

从数据表创建 C# 对象

c# - 具有 Equals 和 GetHashCode 辅助方法的库,适用于 .NET

c# - 在多线程 C# 应用程序中检测到 LoaderLock