0

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

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

示例代码:

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

public static void AddItemsToQueue(string itm)
        {

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

        }
4

2 回答 2

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
        }
    }
于 2012-07-07T07:39:26.580 回答
0

这是可能的。

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

一旦你得到数字是 1000,运行一个 for 循环并将数据插入数据表。

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

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

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

于 2012-07-07T07:25:28.767 回答