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

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

ただいまの
回答率

87.61%

VB.NET でdatagridviewを使ってSQLserverのテーブル更新

解決済

回答 2

投稿

  • 評価
  • クリップ 1
  • VIEW 9,315

score 13

SQLserverのテーブルを編集したいです。

DataGridViewに表示まではできるのですが、その後
・内容の編集
・行削除
・行追加
をしたら、ボタンをクリックして更新という動作を行いたいです。

簡単に行う方法はありますか?

特定のテーブルだけというわけではないので、可能であればデータソース構成ウィザードは使用したくありません。

よろしくお願いいたします。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

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

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

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

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

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

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

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

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

0

他で少し回答が出ていますがDataGridViewを含んだ場合。
主キーが設定されている事が前提ですが、DataSetクラスとSqlDataAdapterクラス、SqlCommandBuilderクラスを使うと編集結果をデータベースへ自動で更新する事ができます。
簡単?かは人それぞれなのでお気にめすか分かりませんがウィザードを使わずコードで行うとこんな感じ。必要最低限なので後で工夫してくださいね。
DataSetやDataTableは別個(メモリ)に表形式で持っていますのでデータベースとの接続を切ってもデータを保持しています。
まぁここではまたデータベースを更新しないといけないので切らずに。

Imports System.Data.SqlClient
Public Class Form1
    Private Cn As New SqlConnection()
    Private Builder As New SqlConnectionStringBuilder()
    Private DaAdap As SqlDataAdapter
    Private DaSet As New DataSet()

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load

        Builder.DataSource = "(local)\SQLEXPRESS"
        Builder.InitialCatalog = "<データベース名>"
        Builder.IntegratedSecurity = True '特に指定がなかったのでWindows統合認証

        Cn.ConnectionString = Builder.ConnectionString
        DaAdap = New SqlDataAdapter("select * from <テーブル名>", Cn)
        '追加・更新・削除を自動で処理するためのオブジェクト
        Dim CmdBuilder As New SqlCommandBuilder(DaAdap)

        DaAdap.Fill(DaSet)
        DataGridView1.DataSource = DaSet.Tables(0)

    End Sub

    '更新ボタン
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

        'DataGridViewで編集した結果をDataSetを通してデータベースを更新
        DaAdap.Update(DaSet)

    End Sub

    Private Sub Form1_Closing(sender As Object, e As CancelEventArgs) Handles Me.Closing
        DaAdap.Dispose()
        Cn.Dispose()
    End Sub

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/03/06 10:29

    できました、ありがとうございます。エラー処理等追加して使用させていただきます。

    キャンセル

0

特定のテーブルだけというわけではないので、可能であればデータソース構成ウィザードは使用したくありません。

そこを考え直さないと難しいと思いますが、「可能であれば」程度の話で必須ではないのであれば、やはり Visual Studio のウィザードを使って定番の構成のアプリを作る以外に現実的な方法はないと思います。

ご存知かもしれませんが、DB が SQL Server であれば以下のチュートリアル:

チュートリアル : データベースへのデータの保存 (単一テーブル)
https://docs.microsoft.com/ja-jp/previous-versions/0f92s97z(v=vs.120)

10 行でズバリ !! 非接続型のデータ アクセス (ADO.NET) (C#)
https://code.msdn.microsoft.com/windowsdesktop/10-ADONET-C-cbfe7688

・・・のように Visual Studio のデータソース構成ウィザードを利用して型付 DataSet + TableAdapter を作って、それを利用してアプリを作ると、以下のページの図のような構造のアプリが、ほとんど自分でコードを書くこと無しに作れます。

Windows フォーム アプリケーションでのデータへの接続
https://docs.microsoft.com/ja-jp/previous-versions/wxt2cwcc(v=vs.120)

操作に慣れると 10 分もかからず作れるはずです。自力で一からコードを書く場合のような種々の問題に悩むことはなくなり、開発工数は激減するはずです。保守工数も減るはずです。お試しください。

【追記】

書き忘れましたが、データソース構成ウィザードを使うメリットとして、アプリの作成が簡単になるだけではなく、Visual Studio 2008 から新しく追加された TableAdapterManager クラスを利用できることがあります。

TableAdapterManager には、階層更新を実現するロジックを持つ UpdateAll メソッド、手動トランザクション処理が実装されており、これを使わない手はないと思います。

TableAdapterManager
http://surferonwww.info/BlogEngine/post/2011/12/21/TableAdapterManager.aspx

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/03/06 10:30

    ありがとうございます、読んで理解を深めます。

    キャンセル

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

  • ただいまの回答率 87.61%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

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