質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

LINQ to SQL

LINQ to SQLは.NET Framework 3.5のコンポーネントで、リレーショナル データをオブジェクトとして管理するためのランタイム インフラストラクチャを提供します。

LINQ

LINQとはLanguage INtegrated Queryの略で、「統合言語クエリ」という意味です。C#やVisual Basicといった言語のコード内に記述することができるクエリです。

LINQ to Dataset

LINQ to Datasetは、ADO.NET のコンポーネントのひとつです。DataSetオブジェクトにキャッシュされたデータへのクエリを、よりシンプルかつ高速にします。クエリを記述する際、プログラミング言語そのものを使うことができるため、クエリ操作が簡単になるという利点があります。

解決済

LINQ to Dataset をつかったデータベースへの問い合わせ方法を教えてください。

makiikeda1216
makiikeda1216

総合スコア128

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

LINQ to SQL

LINQ to SQLは.NET Framework 3.5のコンポーネントで、リレーショナル データをオブジェクトとして管理するためのランタイム インフラストラクチャを提供します。

LINQ

LINQとはLanguage INtegrated Queryの略で、「統合言語クエリ」という意味です。C#やVisual Basicといった言語のコード内に記述することができるクエリです。

LINQ to Dataset

LINQ to Datasetは、ADO.NET のコンポーネントのひとつです。DataSetオブジェクトにキャッシュされたデータへのクエリを、よりシンプルかつ高速にします。クエリを記述する際、プログラミング言語そのものを使うことができるため、クエリ操作が簡単になるという利点があります。

2回答

0評価

1クリップ

7453閲覧

投稿2014/08/21 07:10

前回も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

ComicMSAccess.AuthorDataTable AuthorTable = new ComicMSAccess.AuthorDataTable(); ComicMSAccessTableAdapters.AuthorTableAdapter authorAdapter = new ComicMSAccessTableAdapters.AuthorTableAdapter(); authorAdapter.Fill(AuthorTable); AuthorTable.AddAuthorRow(1, "赤松健", "あかまつけん", new DateTime(1968, 7, 5), "http://www.ailove.net/main.html"); AuthorTable.AddAuthorRow(2, "久米田康治", "くめたこうじ", new DateTime(1967, 9, 5), "http://www.ailove.net/main.html"); AuthorTable.AddAuthorRow(3, "藤田和日郎", "ふじたかずひろ", new DateTime(1964, 5, 24), "http://websunday.net/backstage/kumeta.html"); AuthorTable.AddAuthorRow(4, "島本和彦", "しまもとかずひこ", new DateTime(1961, 4, 26), "http://simamoto.zenryokutei.com/"); var list = AuthorTable.AsEnumerable(); list.CopyToDataTable(AuthorTable,LoadOption.PreserveChanges); //authorAdapter.Update(AuthorTable); foreach (var i in list) { Console.WriteLine("{0} {1} {2} {3}",i.Id,i.Name,i.Kana,i.Birthday,i.Uri); } Console.ReadLine();

08/22 おわ騒がせしました。解決方法です。


やはり、MS AccessはLINQがサポートされていないということもあり、
LINQによる問い合わせ難しいようです。

ただし、LINQ to Dataset を使うことで疑似的にLINQのように
データベースへアクセスできるようです。

データセット作成する際、型付きデータセットを使い、自動で作成するのですが、
その際、マッピングされるだけでなく、使用するデータ・プロバイダにそった
アダプターも作成されます。

今回のプログラムに関して

原因:

authorAdapter.Update(AuthorTable);
は一度に一回のクエリしか発行できないところにあるようです。

解決方法:
上記のプログラムを

lang

AuthorTable.AddAuthorRow(1, "赤松健", "あかまつけん", new DateTime(1968, 7, 5), "http://www.ailove.net/main.html"); authorAdapter.Update(AuthorTable); AuthorTable.AddAuthorRow(2, "久米田康治", "くめたこうじ", new DateTime(1967, 9, 5), "http://www.ailove.net/main.html"); authorAdapter.Update(AuthorTable); AuthorTable.AddAuthorRow(3, "藤田和日郎", "ふじたかずひろ", new DateTime(1964, 5, 24), "http://websunday.net/backstage/kumeta.html"); authorAdapter.Update(AuthorTable); AuthorTable.AddAuthorRow(4, "島本和彦", "しまもとかずひこ", new DateTime(1961, 4, 26), "http://simamoto.zenryokutei.com/"); authorAdapter.Update(AuthorTable);

と追加することでデータベースファイルを更新することができました。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

LINQ to SQL

LINQ to SQLは.NET Framework 3.5のコンポーネントで、リレーショナル データをオブジェクトとして管理するためのランタイム インフラストラクチャを提供します。

LINQ

LINQとはLanguage INtegrated Queryの略で、「統合言語クエリ」という意味です。C#やVisual Basicといった言語のコード内に記述することができるクエリです。

LINQ to Dataset

LINQ to Datasetは、ADO.NET のコンポーネントのひとつです。DataSetオブジェクトにキャッシュされたデータへのクエリを、よりシンプルかつ高速にします。クエリを記述する際、プログラミング言語そのものを使うことができるため、クエリ操作が簡単になるという利点があります。