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

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

新規登録して質問してみよう
ただいま回答率
85.48%
DataSet

DataSetは、ADO.NETアーキテクチャのコンポーネントです。データベースから取得したレコードをメモリ領域に格納するクラスを指します。データの保持やテーブル間のリレーション・制約といった保持も可能です。

C#

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

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Q&A

解決済

4回答

6757閲覧

C#からMySQLにDataTableを渡したい

Com

総合スコア30

DataSet

DataSetは、ADO.NETアーキテクチャのコンポーネントです。データベースから取得したレコードをメモリ領域に格納するクラスを指します。データの保持やテーブル間のリレーション・制約といった保持も可能です。

C#

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

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

0グッド

0クリップ

投稿2019/08/01 11:37

編集2019/08/02 00:40

Windows10で visual studio 2017 communityを使ってコードを書いております。。

MySQLで用意された.NET用のdll(MySQL.DATA.dll)を利用してMySQLにコネクションしております。

※やりたい事
数万件のデータが入ったCSVデータを一括でMySQLのテーブルに追加したいです。
例えばですが、CSVデータには商品コードと個数が入っているときに
このデータを商品情報のテーブルデータと結合して、出荷テーブルに入れたいとき
MS SQLServerを使った場合は、いったんCSVデータをDataTableに取込んで そのDataTable を
DBにパラメータとして更新していました。
(↓こんな感じ)
MS SQLServer側にユーザー定義テーブル(userTable)を用意しておく。

  SqlConnection cn = new SqlConnection("接続情報")   cn.Open();   SqlCommand cmd = cn.CreateCommand(); cmd.Parameters.Add(new SqlParameter("@DT", SqlDbType.Structured));   cmd.Parameters["@DT"].Direction = ParameterDirection.Input; cmd.Parameters["@DT"].TypeName = "userTable"; cmd.Parameters["@DT"].Value = CsvDataTable; //←CSVデータをDataTableに入れてる string sql sql = "insert into targetTable "; sql += "select a.商品コード, b.商品名, a.個数, b.商品価格, (a.個数 * b.商品価格) as 小計 "; sql += "from @DT as a "; sql += "left join 商品テーブル as b on b.商品コード = a.商品コード"; cmd.CommandText = sql; cmd.ExecuteNonQuery()

MySQLに DataTable を渡す方法はありますでしょうか?

コードや、参考になるサイトなどご教授いただきたく
何卒よろしくお願いいたします。

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

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

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

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

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

guest

回答4

0

環境がないので検索しただけで検証はしていないのですが、

「Bulk copy a DataTable into MySQL (similar to System.Data.SqlClient.SqlBulkCopy)」
https://stackoverflow.com/questions/30615443/bulk-copy-a-datatable-into-mysql-similar-to-system-data-sqlclient-sqlbulkcopy

MySqlDataAdapter より MySqlBulkLoader を使うと速いよとのコメントがあります。

ちょっと気になることがあって

「5.14 Using the MySqlBulkLoader Class」
https://dev.mysql.com/doc/connector-net/en/connector-net-programming-bulk-loader.html

中段あたりの「Note」に、Local プロパティを True にせよと書いてあります。

「MySqlBulkLoader.Local Property」
https://dev.mysql.com/doc/dev/connector-net/8.0/html/P_MySql_Data_MySqlClient_MySqlBulkLoader_Local.htm

なんだかよくわからない・・・

投稿2019/08/02 02:09

編集2019/08/02 08:01
KOZ6.0

総合スコア2626

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

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

Com

2019/08/02 08:17

ありがとうございます! 他のサイト見てみましたが、セイキュリティ設定の問題のようです。 この辺の書き方で、まだ動くところまでコード書けていません。。。
guest

0

MySqlDbType Enumeration

SqlDbType.Structured に対応するものはありません。なので、同じ方法は使えません。
商品テーブルをあらかじめ読み込み、それと CSV から目的のデータを作って insert するのが簡単だと思います。

投稿2019/08/02 01:01

Zuishin

総合スコア28660

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

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

Com

2019/08/02 08:15

無いという情報、大変ありがたいです!
Zuishin

2019/08/02 08:25

無いのが本題ではなく、次に書いているのが本題です。ストアドプロシージャーを使わないのであれば、関連テーブルをローカルに読み込むのが非接続型データアクセスの常道です。
Com

2019/08/20 09:09

失礼いたしました! そういう意図だったのですね。勉強になります!
guest

0

ベストアンサー

何を言っているのか理解できませんが・・・

以下の記事の「図1」「図2」のようなことがしたいということですか?

DB 設計者のための明解 ADO.NET 第 1 回
https://docs.microsoft.com/ja-jp/previous-versions/cc482903(v=msdn.10)

であれば、Connector/NET をインストールすれば、Visual Studio のデータソース構成ウィザードを使って、 MySQL のテーブルのレコードの一覧表示、編集、更新を行う Windows Forms + DataGridView アプリを作ることができますよ。

実行すると以下のようになります。

イメージ説明

投稿2019/08/01 12:58

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

Com

2019/08/02 00:46 編集

ありがとうございます! 確かに、、、やりたい事を書いていませんでした。。。 質問文に追加させていただきました! 「 ※やりたい事 数万件のデータが入ったCSVデータを一括でMySQLのテーブルに追加したいです。....... 」
退会済みユーザー

退会済みユーザー

2019/08/02 01:33

mysql csv bulk import などをキーワードにググって調べたことがありますか? もしまだならやってみましょう。 すでに調べたと言うことなら、ヒットした記事を 2,3 例にあげて、それのどこが目的に合わないか書いてください。
退会済みユーザー

退会済みユーザー

2019/08/02 01:39

もし、DataTable が完成していて(もしくはそこは問題なく可能ということで)、そこから話を始めたいということでしたら、DataAdapter を利用してバルクインサートという方法はいかがですか?
Com

2019/08/02 08:14 編集

おおお。 UpdateBatchSize プロパティがバッチってことですね! 確認しましたら、MySql.Data.MySqlClient.MySqlDataAdapter で UpdateBatchSizeプロパティが 出てきました! 試してみます!
Com

2019/08/20 09:10

時間が掛かってしまいましたが、この方法でガシガシ動かすことができました。 ありがとうございます!
guest

0

たぶんやりたいことはMySQL用のADO.NETドライバ(Connector/NET)を使えばできます。
ググってみてください。

投稿2019/08/01 12:46

gentaro

総合スコア8949

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

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

Com

2019/08/02 00:52 編集

ありがとうございます! ここを見つけました。 https://ameblo.jp/tetsuya-staff/entry-10157130800.html DataAdapter と MySqlCommandBuilder を利用して DataAdapter.Update(DataTable) で簡単に更新できるよって内容です。 DataTableを渡すのとは少し違いますが、応用でなんとか解決できそうです。。。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問