2012-07-07 30 views
0

我加入的队列“<‘字符串’>”异步地Queue.Instead的使用INSERT查询队列中每个数据由行插入行项目,我希望将这些项目添加到DataTableOnly时如果( evtLogQueue.Count == 1000)。以便DataTable可以进一步用于批量插入,使用BulkCopy到SQLServerDB。是否有可能将队列数据添加到C#中的DataTable?

我想知道是否可以做?如果是,那么如何?或任何其他建议?

示例代码:

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

public static void AddItemsToQueue(string itm) 
     { 

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

     } 

回答

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 
     } 
    } 
+0

非常感谢@Asif! 现在我想设置一个时间间隔或安排队列在特定时间插入所有数据到数据库间隔每30分钟后说任何建议? – 2012-07-07 07:46:24

+0

@SHEKHARSHETE,我认为你不需要安排队列来将数据插入到数据库中,如果你想这样做只是为了避免锁定......更合适和直接的方法是每1000使用线程或任务异步地登录到数据库。 – 2012-07-07 08:15:24

+0

以上的任何示例代码? – 2012-07-07 09:44:18

0

的可能。

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

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

请检查下面提到的链接,做批量复制

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

让我知道如果你仍然面临的任何问题。

+0

感谢您的回复!我会尝试!现在我想设置一个时间间隔或安排队列在特定时间插入所有数据到数据库间隔每隔30分钟后如何做任何示例代码? – 2012-07-07 07:43:31

相关问题