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

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

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

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

MySQL

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

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Q&A

解決済

4回答

1654閲覧

C# 処理に対するデータベース接続回数について

退会済みユーザー

退会済みユーザー

総合スコア0

C#

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

MySQL

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

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

0グッド

0クリップ

投稿2019/01/21 06:26

編集2019/01/21 06:34

処理を行う際、データベースの接続回数は少ないほうがパフォーマンスが良い、負荷が少ない、と聞きました。

しかし、1つの処理としてまとめる単位をどうするべきか悩んでいます。
以下、実際の問題点です。

Formロード時
・comboBox1のアイテムをデータベースから取得する
・comboBox2のアイテムをデータベースから取得する
・dataGridView1のデータをデータベースから取得する
・dataGridView2のデータをデータベースから取得する

以上の4つの処理を行うのですが、それぞれの値を取得するためにデータアダプタを使っています。
そのためデータアダプタによるデータベースへのアクセスが4回行われています。

ここの処理を「Formの値取得」という1つの処理として行うべきなのでしょうか?
それとも、このままの処理の単位で良いのでしょうか?

皆様のご意見をお待ちしております。拙い質問ですみません。よろしくお願いします。m(__)m

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

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

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

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

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

guest

回答4

0

・comboBox1のアイテムをデータベースから取得する

他に表示する情報があるかないかで違ってくるのでは。
もし同一処理にてDB接続が発生する処理があるのでしたら、コネクションは持ちまわすべきと思います。

質問者さんが仰る「データベースの接続」が具体的に何を想定しているのかを具体的に書かれた方が良いと思います。
本当に「接続」なのか「アクセス(select文など)」のことなのか。

投稿2019/01/21 06:33

m.ts10806

総合スコア80850

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

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

退会済みユーザー

退会済みユーザー

2019/01/21 06:36

申し訳ございません。途中で質問投稿してしまいました。 よろしければ、修正後の質問も見ていただければ幸いです。m(__)m
m.ts10806

2019/01/21 06:38

それぞれのコンポーネントは別のテーブルから持ってくるのですよね? コネクションを持ちまわしているのであればselectがその回数分発生するのは普通だと思います。
退会済みユーザー

退会済みユーザー

2019/01/21 06:48

それぞれ別のテーブルから値を取得します。 コネクションなのですが、Form.csに直接自作メソッドを書いたり、イベントの中に直接処理を書くとForm.csの可読性が下がると思い、別クラスにデータテーブルを戻り値、select文(string)を引数としたメソッドを作成し、それを毎回呼び出しています。
m.ts10806

2019/01/21 06:57

そうですね。selectの実行自体は共通で良いと思います。
退会済みユーザー

退会済みユーザー

2019/01/21 07:08

ありがとうございます。このまま方針を変えずに作ってみます。勉強になりました。
guest

0

ベストアンサー

4回SELECTで問題無いと思いますよ。

処理を行う際、データベースの接続回数は少ないほうがパフォーマンスが良い、負荷が少ない、と聞きました。

その通りです。ただ、コードの良し悪しは速さや負荷だけではないです。
速さは、要件(決められた秒数)をクリアしていればよいです。
極論10秒と決められていたら、9秒も1秒も等価と考えています。
職業プログラマは、競技をしているわけではありませんので。1ミリ秒を争う必要は無いのです。

ただ、ループの中でSELECTをかける。
ループの回数が未確定。の状態はコーディングミスだとも思います。
100回も200回もSELECTをかけるのはNG。

SELECTの回数を減らすために、変な作り方をする方が好ましくないです。
質問者さんの作りは、変では無いし、SELECT回数も多くは無いです。
よって、今のままで大丈夫だと思いますよ。

投稿2019/01/22 14:50

Kaiser

総合スコア295

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

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

退会済みユーザー

退会済みユーザー

2019/01/22 23:21

重要なのは要件を満たしているかどうか。ですね。 少しでも早く、負荷の少ないものを。。と考えすぎていました。 今の作りで動作的に問題ないですし、このまま作っていこうと思います。 ありがとうございました。
guest

0

すでに答えが出ているようですが・・・

4 つとも異なるテーブルから取得するので SELECT クエリは 4 回投げざるを得ないということですよね。

であれば、同じ接続プールを使う(接続文字列が同じであればデフォルトでそうなるはず)ようにすれば問題なさそうだと思います。

投稿2019/01/21 08:39

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

1つのコンボボックスのアイテムであれば、1回のDB接続で取得してくるべきだと思います。
これで回答になっていますか?

投稿2019/01/21 06:28

shun_kuwa

総合スコア187

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

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

退会済みユーザー

退会済みユーザー

2019/01/21 06:36

申し訳ございません。途中で質問投稿してしまいました。 よろしければ、修正後の質問も見ていただければ幸いです。m(__)m
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問