使用LINQ从DataSet插入多行到SQL

时间:2013-10-31 21:16:51

标签: linq

我正在尝试使用LINQPad使用DataSet查询MS Access表,并希望将查询结果插入到SQL表中。

这是我从MS Access表中获取数据的方式:

string connectionString = ("Driver={Microsoft Access Driver (*.mdb, *.accdb)};Dbq=C:\\Temp\\temp.mdb;");
OdbcConnection myconnection = new OdbcConnection(connectionString);
OdbcDataAdapter myadapter = new OdbcDataAdapter("SELECT * FROM Name", myconnection);
DataSet myCustomersDS = new DataSet();
myadapter.Fill(myCustomersDS, "Name");

现在在LINQPad中,我想将数据集myCustomersDS中的所有记录插入到SQL表中。 我尝试以这种方式在LINQPad中查询数据集,它给了我正确的结果:

Connection.Open();
var toInsert = from b in myCustomersDS.Tables["Name"].AsEnumerable()
           select b;
toInsert.Dump();
Connection.Close();

我尝试了这些命令的各种版本,但总是得到与DataSet类型不匹配的错误与表类型匹配。

Name.InsertOnSubmit(toInsert);
SubmitChanges();

谢谢你, 史蒂芬

2 个答案:

答案 0 :(得分:2)

使用LINQ Table对象将数据插入表时,需要将要添加的数据映射到表的行类型的对象。

如果你有一个名为Name的表,你需要创建一个Name对象的实例,填写要插入的值,然后插入它。

如果插入一行,请使用InsertOnSubmit()。否则,如果要插入对象集合,请使用InsertAllOnSubmit()

如,

// insert a single item
Name.InsertOnSubmit(new Name
{
    Name = "Bob",
    Title = "Janitor",
});

// inserting multiple items
var toInsert =
    from row in myCustomerDS.Tables["Name"].AsEnumerable()
    select new Name
    {
        Name = row.Field<string>("Name"),
        Title = row.Field<string>("Title"),
    };
Name.InsertAllOnSubmit(toInsert);

SubmitChanges();

答案 1 :(得分:1)

LinqPad中有MS Access的上下文驱动程序,您可以在此处下载Microsoft Access Data Context Driver 下载.lpx文件,在LinqPad中,单击添加连接,然后单击'查看更多驱动程序...'然后单击“浏览”并选择.lpx文件,驱动程序添加在顶部列表框中 MS Access Data Context Driver in LinqPad