0

我正在尝试使用 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();

谢谢你,史蒂文

4

2 回答 2

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();
于 2013-10-31T21:25:36.093 回答
1

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

于 2013-12-11T13:32:08.837 回答