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 テーブル オブジェクトを使用してテーブルにデータを挿入する場合、テーブルの行型のオブジェクトに追加するデータをマッピングする必要があります。

という名前のテーブルが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 用のコンテキスト ドライバーがあり、ここからダウンロードできます 。 「参照」して、ドライバーが上部のリストボックスに追加された.lpxファイルを選択します LinqPad の MS Access データ コンテキスト ドライバー

于 2013-12-11T13:32:08.837 に答える