2013-06-24 3 views
2

Я использую эту библиотеку:DataReader из запросов LINQ для SqlBulkCopy

Link to EntityDataReader

поставить некоторые результаты запросов LINQ из разбора XML в базу данных с SqlBulkCopy, который мы ÉS в DataReader поставить данные непосредственно без использования данных или таких структур данных.

Я не в состоянии его реализовать.

Это код, который я написал до сих пор без всякого успеха:

XDocument xdoc = XDocument.Parse(str_XmlToParse); 

      //ORDINI 

      IEnumerable<XDocument> xdod; 

      var orders = from c in xdoc.Descendants("ordersdata").AsEnumerable().Descendants("order").AsEnumerable() 
         select new 
         { 
          Client_ID = (string)c.Element("Client").Element("ID"), 
          Doc_ID = (string)c.Element("ord_ID"), 
          Doc_data = (DateTime)c.Element("ord_datetime"), 
         }; 
     IDataReader dr = orders.AsDataReader(); 

      using (SqlConnection con = new SqlConnection(connectionString)) 
      { 
       con.Open(); 
       using (SqlTransaction tran = con.BeginTransaction()) 
       { 
        var newOrders = 
          from i in Enumerable.Range(0, totalToSend) 
          select new Order 
          { 
           customer_name = "Customer " + i % 100, 
           quantity = i % 9, 
           order_id = i, 
           order_entry_date = DateTime.Now 
          }; 

        SqlBulkCopy bc = new SqlBulkCopy(con, 
         SqlBulkCopyOptions.CheckConstraints | 
         SqlBulkCopyOptions.FireTriggers | 
         SqlBulkCopyOptions.KeepNulls, tran); 

        bc.BatchSize = 1000; 
        bc.DestinationTableName = "order_queue"; 
        bc.WriteToServer(newOrders.AsDataReader()); 

        tran.Commit(); 
       } 
       con.Close(); 

, который в основном копия того, что в примерах этой библиотеки.

Я даже не понимаю, что происходит со всеми их странными отливками, но мне нужно, чтобы это сработало. (Поверьте мне, я пытался понять)

Я получаю эту ошибку:

Error 1 'System.Collections.Generic.IEnumerable AnonymousType#1>' does not contain a definition for 'AsDataReader' and no extension method 'AsDataReader' accepting a first argument of type 'System.Collections.Generic.IEnumerable AnonymousType#1>' could be found (are you missing a using directive or an assembly reference?)

Что это? Как это исправить?

Благодаря

+0

PS. Я предполагаю, что это ошибка компилятора, а не исключение. Верный? – Aron

+2

Привет. Я отчаянно пытаюсь завладеть этой библиотекой. Я пошел по ссылке, но она ушла на пенсию. Кто-нибудь знает, где я могу скачать его? – serlingpa

+1

@serlingpa Может быть, это слишком поздно, но .... https://code.msdn.microsoft.com/windowsdesktop/WPF-783fc64b/sourcecode?fileId=94546&pathId=1773531594 –

ответ

2

Ну, в принципе ошибка сказать, что вы не можете применить метод «AsDataReader» с параметром в «IEnumerable» объект, поскольку не существует такой метод, с этим определением. Если это может помочь, попробуйте добавить в ссылки DLL «System.Data.Entity» и System.Data.EntityClient

+0

Пробовал, но я не сделал ожидайте его работы. Это просто проблема плохого кастинга из анонимного типа в список Ienumerable или что-то в этом роде. –

+0

какой тип является переменной «заказы»? потому что я предполагаю, что результат вашего запроса LINQ не возвращает то, к чему вы можете применить метод AsDataReader(). Кстати: почему вы положили 2 ".AsEnumerable()"? я думаю, вам просто нужен один – davideberdin

+0

Просто взглянул на образец, который вы добавили. Вам нужно использовать Microsoft.Samples.EntityDataReader'а вверху (если вы не изменили исходный файл 'EntityDataReader.cs'). Причина в том, что вам нужно заставить компилятор искать статический класс 'Microsoft.Samples.EntityDataReader.EntityDataReaderExtensions'. – Aron