VB.NETでODBC接続のデータベースの更新方法について

このQ&Aのポイント
  • VB.NETでODBC接続のデータベースの更新方法について解説します
  • VB.NETの初心者がMySQLとの接続でデータベースを更新する方法についての質問です
  • VB.NETでデータセットを使用してデータベースの更新を行う方法についての疑問です
回答を見る
  • ベストアンサー

VB.NETでODBC接続のデータベースの更新方法について

VB.NETを触り初めてまだ数日の初心者ですが、宜しくお願いします。 VB5.0の経験はありますが、あまりの違いに戸惑っています。 VB.NETにて、MySQL3.23.56との接続にチャレンジしています。 私が調べた範囲では、OdbcDataAdapterにてデータセットを取得し、OdbcDataAdapterにInsertCommand,UpdateCommand,DeleteCommandを設定した上でOdbcDataAdapterのUpdateメソッドによってデータベースを更新するのがセオリーのように感じたのですが、正直、いちいちパラメーターとかを設定するのが面倒な気がします。 それにこの方法だとデータセットのすべてのフィールドをWhere条件に使うようなので、パフォーマンス的にもどうかなと思います。 データセットという概念は非常に便利だと思うのですが、変更されたデータセットのデータベースへの反映をもう少しスマートにできないでしょうか? 皆様はどのようにされているのか、是非参考にさせて下さい。宜しくお願いします。

  • TM31
  • お礼率81% (91/111)

質問者が選んだベストアンサー

  • ベストアンサー
  • todo36
  • ベストアンサー率58% (728/1234)
回答No.1

(1)コマンドビルダを使う Select文を決めれば、Insert, Update, Delete文を自動生成します。 パフォーマンスが必要でなければ、これで十分。 (2)データセットを使わずに直接SQL文を発行する。 OleDbCommand.Execute* 等。

TM31
質問者

お礼

すみません。 お礼を補足の欄に記入してしまいました。

TM31
質問者

補足

早速のご回答ありがとうございます。 コマンドビルダは試してみました。 確かにこれは便利です。 ただし、あくまでも想像でしかありませんが、この方法は場合によっては「Update(Insert,Delete)Command & パラメーター設定」よりもパフォーマンスが悪いんでしょうね。(そうでなければUpdate(Insert,Delete)Commandが用意されている意味がないような気がします。) やっぱりパフォーマンス重視であれば直接SQLを発行するのがベストということでしょうか。 結局はパフォーマンスをとるか、生産性をとるかということなんでしょうね。

関連するQ&A

  • VB DB更新時にパラメーターへ値のセット

    データベースの更新についてご指導下さい。 VB2010からSQLサーバーのデータベースに接続しております。 dataAdapter.Updateによりデータベースを更新する際の パラメーターへ値をセットする方法を教えて下さい。 テーブル名Test Code Name ------------ A   Suzuki 希望する処理 テキストボックスに入力された名前に変更 例) Suzuki → Yamada ○フォームの変数として定義 Dim dataAdapter As New SqlDataAdapter Dim dataSet As New DataSet ○FormLoad時にSelectCommandとUpdateCommandを設定 Dim SQL As String = "" Dim command As SqlCommand Dim connection As SqlConnection = New SqlConnection(~) SQL = "SELECT * FROM Test WHERE Code = @code " command = New SqlCommand(SQL, connection) dataAdapter.SelectCommand = command dataAdapter.SelectCommand.Parameters.Add("@code", SqlDbType.Char) SQL = "UPDATE Test SET Name = @name WHERE Code = @code" command = New SqlCommand(SQL, connection) dataAdapter.UpdateCommand = command dataAdapter.UpdateCommand.Parameters.Add("@code", SqlDbType.Char) dataAdapter.UpdateCommand.Parameters.Add("@name", SqlDbType.Text, 50) ○データ表示時にはこれで表示されました。 dataAdapter.SelectCommand.Parameters.Item("@code").Value = ComboBoxCode.text dataAdapter.Fill(dataSet) ○このSelectCommandを参考にこのように書いて見たのですが更新されません。 dataAdapter.UpdateCommand.Parameters.Item("@code").Value = ComboBoxCode.Text dataAdapter.UpdateCommand.Parameters.Item("@name").Value = TextBoxName.Text dataAdapter.Update(dataSet) どのようにしたら実行時にパラメーター化したところへデータをセットできるのでしょうか? データセットに値が入っていないのでは?と予想したのですが…。

  • VBのデータベース接続がわかりません

    javaでデータベース接続する場合はお決まりの 定型文みたいなものがあると思うのですが VBの場合はデータベースからのデータ取得方法が 何パターンもあって理解に苦しみます。 データ取得方法の各パターンが完結に整理されている サイトはありませんでしょうか データベース接続方法が何パターンもあって挫折しそうです また、簡単にデータ取得方法の概念というか枠組みというか 決まりごとみたいなものをわかりやすく教えていただけません でしょうか 宜しくお願いします

  • VB.netでのMySQL操作について

    VB.netでMySQLからデータを取得する時に VB.netのエディションがStanderdだとできないんでしょうか? もしくは、MySQLだからできないんでしょうか? そもそも、データベースと連携ってのが無理なんでしょうか? もし、できる場合は詳細をお願いしますm(__)m

  • VB.neからデータベースへの接続

    ログインシステムを作りたいのですが、 (ID PASSの登録は済ませていることを前提として) 登録情報をHSQLDB MYSQLなどを使いサーバで動かしていて、 クライアント(別PC)言語VB.net限定より、データベースに接続し、認証したいのですが、そのアドバイスをいただきたいです。よろしくお願いします。データベースにAccsessはなしです。Oracleも無理です..。

  • VB.netでのMySQLの接続エラーについて

    VB.netでのMySQLの接続エラーについて 『行いたい事』 レンタルサーバー(ロリポップ)で管理しているサイトのデータベース(MySQL)にパソコンから接続したいと考えています。 パソコンからレンタルサーバーで管理しているデーターベースにアクセスするための言語はVB.netを使用しています。 パソコンからVB.netにてSQLを使用してサーバーにあるデータベースのデータの取得等を行いたいと考えています。 『問題』 下記プログラムにてstrPasswordに直接、レンタルサーバー(ロリポップ)より取得したパスワードを記載しているのですが、Open() 時にエラーとなってしまいます。 下記★の部分が、会社からインターネットに接続する為のプロバイダーから取得しているパスワードに自動的に変わってしまいます。 基本的な事で申し訳ありませんが、ご教授のほどよろしくお願いします。 ●環境 ・Windows XP ・Visual Studio 2008 ・.NET Framework3.0 sp2 端末からデータベースへアクセスするためにConnector/Netを入手しインストールも行っています。 ●-----エラー内容----- Access denied for user 'ユーザID'@'★ここが変わっています★' (using password: YES) ●-------------------- ●-----プログラム----- Dim strServerName As String = "●●.lolipop.jp" Dim strUserID As String = "ユーザID" Dim strPassword As String = "パスワード" Dim strDataBaseName As String = "データベース名" Dim sqlStr As String Dim dr As MySqlDataReader Dim cmd As MySqlCommand Dim MySql As New MySqlConnection '接続パラメータ定義. Dim strParam = String.Format("Server={0};User ID={1};Password={2};Initial Catalog={3};Convert Zero Datetime=true", _ strServerName, strUserID, strPassword, strDataBaseName) '接続準備 MySql = New MySqlConnection(strParam) '接続 MySql.Open() ★この行でエラーとなり書き換わっています。 'クローズ MySql.Close() ●------------------

  • vb2008からデータベースのNULL禁止項目を含む変更したい

    vb2008とSQLServer2008Expressを勉強しております。 データベース「tblTest」を作成し、DataGridViewからNULLを禁止された項目を含む変更を行う処理で困っています。 tblTestの内容は No|City ---------- 0 |Tokyo 1 |Osaka 2 |Fukuoka 3 |Nagoya としており、NoをNULL禁止にしております。 SQLDataAdapterを使用して UpdateCommand、InsertCommand、DeleteCommandの設定、実行はうまくいきました。 困っている点は、 No |City ---------- 0 |Tokyo 1 |Osaka 2 |Fukuoka 3 |Nagoya  ←ここを No |City ---------- 0 |Tokyo 1 |Osaka 2 |Fukuoka 4 |Hokkaido ←この様に変更したい NoとCity両方を変更するような処理をしたい場合についてです。 DataGridView上では値の変更ですが、 処理的にはInsertCommandとDeleteCommandが一緒に実行されるような気がします。 このような場合、どのような処理を行えばいいのでしょうか? For Each Row As DataRow In Table.Rows で1行ずつ処理をかけるのでしょうか? お分かりの方、アドバイスだけでもよろしくお願いいたします。

  • VB.NETでのMDBへの接続

    あるVB.NETでの書籍を買ったところ、データアダプター、データセット、データコネクションオブジェクトをフォーム下に配置して、そのプロパティーでデータベースへの接続、処理をするようなやり方が書いていました。.NETになってえらく変わったなぁ。。と同時にわかりにくいなぁと困っていたのですが、下のページで、従来と同じようにコードで接続するやり方がありました。 http://anetm.com/dev/tools/vbdotnet/112260.htm これはそれぞれどういったメリットがあり、使い分けはどうすればいいのでしょうか? よろしくお願いします。

  • VB.NETとACCESSについて

    VB.NETを使ってACCESSデータベースに入っているレポート(印刷プレビュー)を呼び出して印刷したいのですが、どうしたらいいかわかりません。VB.NETでデータベースに接続してSQLのinsert文でデータを追加することはできます。その後、VB.NETでデータベースに入っているものを印刷するにはどうしたらいいのでしょうか?ACCESSでレポートは作ってあります。どなたか教えていただけないでしょうか?

  • VB.net

     今までACCESSでしか開発をしていなかった、一般企業のシステム部門の下っ端です。  今回、MySQLとVB.NETを利用して、商品管理システムを作成しようと考えています。  まず、ある程度MySQLの基本的な部分を勉強し、テーブルを作成して、旧システムでACCESSが持っていたデータを一旦CSVに保管して、インポート....といった具合にマスターとなるデータを作りました。  そこで、今度はそのデータをVBで操作してみようと思ったのですが、VB.NETからMySQLへ接続できません。  サーバーエクスプローラーで、どのプロバイダをつかってみても、エラーが出てしまいます。  せめて、どのプロバイダをしようしたら良いのか、分かればよいのですが。 また、VB6で行われていたのをちらっと拝見した覚えがあるのですが、プログラムで接続可能なら、そちらもご教授願えると、とても助かります。  長々とした質問で分かり難いかと思いますが、どなたか、教えていただけないでしょうか?

  • VB.NETのSQL文について

    質問失礼します。 VB、SQLともに勉強しはじめて日が浅い初心者ですが、どなたかお力をお貸しください。 データベースに登録しているデータをNPOIを使って、出力したいと考えています。 DataTableを使用して作りましたが、上手くできない部分があります。 テーブルのカラムは、社員番号、事務物販名、登録数、登録日、更新日のようなものが入っているイメージです。 登録日を検索して、全てのテーブルを抽出したいのですが、○月○日〜○月○日にデータを登録した人というときに、つまづいてしまいました。 SQL.Append("SELECT " ) ・ ・ SQL.Append("WHERE ") SQL.Append(" 登録日 BETWEEN パラメータ1 AND パラメータ2 ) のように、書いたところ問題なく、出力されました。 パラメーターの部分は、DateTimePickerコントロールを配置して、日付を入力した値を設定しています。 2023/1/1 と 2023/1/2と2つ入力して、この2日間のデータを出そうとしたところ、1/1の文しか出力されませんでした。 原因は、データベースに入っているのは、Date型で、YYYY/MM/DD HH:mm:SS形式でした。 1/2の0時以降は、該当データに含まれないということは分かっているのですが、それを含めてのSQLの書き方がわかりません。 単純にSQLを書くには、 BETWEEN 2023/1/1 AND 2023/1/2 23:59:59 で、2日の文を抽出されますが、VBに書く時がうまくできない状態で、 時間の部分を、結合すれば良いのかと思い、 SQL.Append("SELECT " ) ・ ・ SQL.Append("WHERE ") SQL.Append(" 登録日 BETWEEN パラメータ1 AND パラメータ2 II '23:59:59' ") と、DataTimePickerから持ってきた、パラメータの日付に時間を結合してみたところ、ダメでした。 型の問題なのか、よくわからず、勉強している状態です。 基礎がなっておらず、初歩的なミスかと思いますが、ご指導ください。 データベースはOracleを使用しています。

専門家に質問してみよう