我正在使用这个库:
用于将一些来自xml解析的linq查询结果放入数据库中,使用sqlbulkcopy,该方法使用datareader直接存储数据,而无需使用datatable或其他数据结构。
但是我无法实现它。
这是我迄今为止写的代码,但没有成功:
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();
这基本上是该库示例中的内容副本。
我甚至不能正确理解所有奇怪的类型转换,但我需要它能够工作。(相信我,我尝试过去理解)
我一直收到这个错误:
错误 1 'System.Collections.Generic.IEnumerable AnonymousType#1>' 不包含定义为 'AsDataReader' 的方法,且找不到接受类型为 'System.Collections.Generic.IEnumerable AnonymousType#1>' 的第一个参数的扩展方法 'AsDataReader' (是否缺少 using 指令或程序集引用?)
它是什么?我该如何修复它?
谢谢