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

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

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

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

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

Q&A

解決済

3回答

12382閲覧

Dapperで取得したデータをDataTableで取得したい。

yuki00079

総合スコア45

C#

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

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

0グッド

0クリップ

投稿2017/04/26 09:10

###前提・実現したいこと
タイトル通りですが、マッピングしたデータをDataTableとして扱いたいと考えております。Dapperの仕様上はおそらくListのみかと思いますが方法はございますでしょうか。Dapperを使う以上、Listの方が適切かと思いますがDataTableへ変換できないかと考えております。お力お貸しして頂けますと幸いです。

###該当のソースコード

Dim result As IEnumerable(Of Object) = Nothing Using connection = New SqlClient.SqlConnection("接続文字列") connection.Open() 'Testクラスにクエリで取得した結果をマップする。 result = connection.Query(Of Test)(SqlQuery.ToString, New With {パラメータ}) connection.Close() End Using Dim aaa = result.ToList()'ここでDataTableへ変換できないものでしょうか・・・。

###試したこと
C#で似たようなサンプルを見つけましたがうまく変換できず、思い通りの処理にはならなかった。

###補足情報(言語/FW/ツール等のバージョンなど)
VisualBasic14
VisualStudio2017

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

何故Dapperを使うのか状態ですが… 同じ質問を以前に外国圏でもした人がいまして、作者のMarc Gravelもびっくりで、「え、なんでDapper挟むの」って回答しています。(笑)

**が!**まあ、クエリ発行時のパラメータバインディングだけを使いたい時ってありますよね。

そんな助け舟として、DapperにはExecuteReaderというメソッドが用意されてます。
Queryではなくこれを使えばSQLのパラメータバインディングや、コマンドの生成部分はDapperに手伝ってもらいつつ、IDataReaderを受け取って来ることができます。

おかげで、以下のような形でDapperを挟んでDataTableにフェッチできます。

dataTable.Load(connection.ExecuteReader(SqlQuery.ToString, New With {パラメータ}))

投稿2017/05/08 06:22

編集2017/05/08 07:20
haru666

総合スコア1591

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yuki00079

2017/05/08 07:32

返信ありがとうございます。 >クエリ発行時のパラメータバインディングだけを使いたい時ってありますよね。 まさしくその通りです。他の方から頂いた返信通りですが、正直なところDataTableで取得するならDapperはいらないだろうと言うのは正論だと思います。しかし、便利な機能を使いつつ、出来る限りコード修正を最小にするにはDataTableで欲しかったので助かりました。
haru666

2017/05/08 07:35

Marc氏が初めて回答したときにはExecuteReaderメソッドが無かったみたいですね。 後からその要望に応えて追加したようです。
guest

0

Dapperを使う必要があるのであれば、
DataTableに簡単に変換できる方法はないです。

DataSetのFillメソッドを使うとDataSet内のDatatableにSQLを発行した結果を取得できます。

DataSetのFillメソッドでの例は以下になります。

C#

1public void Test04() 2{ 3 SqlConnection connection = new SqlConnection(); 4 SqlCommand command = new SqlCommand(); 5 DataSet ds = new DataSet(); 6 7 // 接続文字列を設定します。 8 connection.ConnectionString = @"Data Source=PC\SQLEXPRESS1;Initial Catalog=TestDatabase;User Id=sa;Password=sa;"; 9 10 using (SqlDataAdapter adapter = new SqlDataAdapter()) 11 { 12 command.Connection = connection; 13 command.CommandText = "SELECT * FROM m_syouhin"; 14 15 adapter.SelectCommand = command; 16 17 // SQLを実行し結果をdsの中に格納します。 18 adapter.Fill(ds); 19 } 20}

投稿2017/05/08 04:57

KIYOSHI

総合スコア268

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

Dapper には DataTable にデータを取得する機能は無いので、List<T> から DataTable に詰め替えるしかないんじゃないでしょうか。

そもそも DataTable が使いたいのであれば、DataSet.Fille() とかを使えば済む話ではないかと思うんですけど、それではダメなのでしょうか?

投稿2017/04/26 16:54

編集2017/04/26 17:00
hidori

総合スコア402

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.51%

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

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

質問する

関連した質問