前回もLINQに関する質問をさせていただきましたが。
ある程度LINQがわかるようになってきました。
今回はLINQ to Datasetに関する質問です。
SQL Server 以外のデータ・プロバイダーでLINQによるデータベースの問い合わせを行いたい場合。
有料で提供されているALINQのようなLINQプロバイダーを利用するという方法もあると思うのですが
LINQ to Datasetを使ったLINQによるデーターベース更新などの操作は可能なのでしょうか?
いろいろ調べているのですがなかなか有力なソースコードが見当たらず困っています。
とりあえずLinq to Dataを使って生成したDatasetのインスタンスに
データを追加するところまではできたのですが、そのあと、データベースファイル(MS Accessファイル .mdb .accdb)に内容を更新するところがうまくいきません。
どなたかご教授ください。
データベースはMS Accessを利用しています。
以下のサイトのAuthorテーブルを利用しています。
http://ufcpp.net/study/csharp/sp3_linqtosql.html
以下に作ったコードを張ります。
lang
1ComicMSAccess.AuthorDataTable AuthorTable = new ComicMSAccess.AuthorDataTable(); 2 3ComicMSAccessTableAdapters.AuthorTableAdapter authorAdapter = new ComicMSAccessTableAdapters.AuthorTableAdapter(); 4 5authorAdapter.Fill(AuthorTable); 6 7AuthorTable.AddAuthorRow(1, "赤松健", "あかまつけん", new DateTime(1968, 7, 5), "http://www.ailove.net/main.html"); 8AuthorTable.AddAuthorRow(2, "久米田康治", "くめたこうじ", new DateTime(1967, 9, 5), "http://www.ailove.net/main.html"); 9AuthorTable.AddAuthorRow(3, "藤田和日郎", "ふじたかずひろ", new DateTime(1964, 5, 24), "http://websunday.net/backstage/kumeta.html"); 10AuthorTable.AddAuthorRow(4, "島本和彦", "しまもとかずひこ", new DateTime(1961, 4, 26), "http://simamoto.zenryokutei.com/"); 11 12var list = AuthorTable.AsEnumerable(); 13 14 15list.CopyToDataTable(AuthorTable,LoadOption.PreserveChanges); 16 17//authorAdapter.Update(AuthorTable); 18 19foreach (var i in list) 20{ 21Console.WriteLine("{0} {1} {2} {3}",i.Id,i.Name,i.Kana,i.Birthday,i.Uri); 22} 23 24Console.ReadLine();
08/22 おわ騒がせしました。解決方法です。
やはり、MS AccessはLINQがサポートされていないということもあり、
LINQによる問い合わせ難しいようです。
ただし、LINQ to Dataset を使うことで疑似的にLINQのように
データベースへアクセスできるようです。
データセット作成する際、型付きデータセットを使い、自動で作成するのですが、
その際、マッピングされるだけでなく、使用するデータ・プロバイダにそった
アダプターも作成されます。
今回のプログラムに関して
原因:
authorAdapter.Update(AuthorTable);
は一度に一回のクエリしか発行できないところにあるようです。
解決方法:
上記のプログラムを
lang
1AuthorTable.AddAuthorRow(1, "赤松健", "あかまつけん", new DateTime(1968, 7, 5), "http://www.ailove.net/main.html"); 2 3authorAdapter.Update(AuthorTable); 4 5AuthorTable.AddAuthorRow(2, "久米田康治", "くめたこうじ", new DateTime(1967, 9, 5), "http://www.ailove.net/main.html"); 6 7authorAdapter.Update(AuthorTable); 8 9AuthorTable.AddAuthorRow(3, "藤田和日郎", "ふじたかずひろ", new DateTime(1964, 5, 24), "http://websunday.net/backstage/kumeta.html"); 10 11authorAdapter.Update(AuthorTable); 12 13AuthorTable.AddAuthorRow(4, "島本和彦", "しまもとかずひこ", new DateTime(1961, 4, 26), "http://simamoto.zenryokutei.com/"); 14 15authorAdapter.Update(AuthorTable); 16
と追加することでデータベースファイルを更新することができました。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2014/11/17 05:58
2014/11/17 11:07