【问题标题】:Is it possible to add Queue Data to DataTable in C#?是否可以在 C# 中将队列数据添加到 DataTable?
【发布时间】:2012-07-07 07:02:15
【问题描述】:

我正在将 Queue"" 中的项目异步添加到 Queue。而不是 使用 INSERT 查询为队列的每个数据逐行插入,我if(evtLogQueue.Count==1000) 时希望将这些项目添加到 DataTableOnly。以便使用 BulkCopy 将 DataTable 进一步用于批量插入到 SQLServerDB。

我想知道有可能吗?如果是,那怎么办?或任何其他建议?

示例代码:

static Queue<string> evtLogQueue = new Queue<string>();

public static void AddItemsToQueue(string itm)
        {

            evtLogQueue.Enqueue(itm);
            Console.WriteLine("Length of Queue:" + evtLogQueue.Count);

        }

【问题讨论】:

    标签: c# data-structures datatable queue


    【解决方案1】:

    是的,这是可能的,您可以通过在您的 AddItemsToQueue(string itm) 方法中添加一些代码来做到这一点。

    public static void AddItemsToQueue(string itm)
        {
            evtLogQueue.Enqueue(itm);
            // Add the following code
            if (evtLogQueue.Count == 1000)
            {
                DataTable dataTable = new DataTable();
                dataTable.Columns.Add("Log");
                foreach (var log in evtLogQueue)
                { 
                    DataRow dr = dataTable.NewRow();
                    dr["Log"] = log;
                    dataTable.Rows.Add(dr);
                }
                evtLogQueue.Clear();     // Most probably you will also need to clear the queue.
                SendBulkData(dataTable); // Send the bulk data
            }
        }
    

    【讨论】:

    • 非常感谢@Asif!现在我想设置一个时间间隔或安排队列在特定时间间隔内将所有数据插入数据库,比如每 30 分钟后有什么建议吗?
    • @SHEKHARSHETE,我认为你不需要安排队列将数据插入数据库,如果你想这样做只是为了避免锁定......更合适和直接的方法将是每 1000 条日志后使用 Thread 或 Task 异步向数据库发送数据。
    【解决方案2】:

    有可能。

    在 AddItemsToQueue(string itm) 中检查队列中元素的数量。

    得到数字为 1000 后,运行 for 循环并将数据插入数据表。

    请查看下面提到的链接以进行批量复制

    http://www.codeproject.com/Articles/16922/SQL-Bulk-Copy-with-C-Net

    如果您仍然遇到任何问题,请告诉我。

    【讨论】:

    • 感谢您的回复!我会尝试!现在我想设置一个时间间隔或安排队列以特定时间间隔将所有数据插入数据库,比如每 30 分钟后如何执行任何示例代码?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多