レコードを更新したいのですが行きづまりました。

解決


ながなが  2008-10-21 22:00:54  No: 145317

ページ読込時にADO.NETでSQLサーバからデータを取得し、夫々のテキストボックスに値を入れ、登録ボタンクリック時そのテキストボックスの内容をサーバに書き込む処理を実施しましたがなかなか書き込めません。どこが悪いのか悪戦苦闘しております。
何方か御教授よろしくお願いいたします。

以下はページ読込時イベントです。

    Protected Sub Page_Load _
        (ByVal sender As Object, ByVal e As System.EventArgs) _
            Handles Me.Load
        '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
        '
        '
        '
        '
        '
        '
        '
        '       読込時、新規追加モード又は修正モードの判断
        '
        '
        '
        '
        '
        '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
        '************************************************************'
        '       クッキーの取込
        '************************************************************'
        Me.txt社員コード.Text = _
            Request.Cookies("CookieName1").Value

        Me.txt社員名.Text = _
            Request.Cookies("CookieName2").Value

        Me.txt固定資産コード.Text = _
            Request.Cookies("CookieName3").Value

        Me.txt入力モード.Text = _
            Request.Cookies("CookieName4").Value

        Me.txtUPID.Text = _
            Request.Cookies("CookieName5").Value

        Dim ADDUPFLG As Long
        ADDUPFLG = Me.txt入力モード.Text

        '************************************************************'
        '       前頁でデータが存在する時は修正モード→そのデータを取得する
        '************************************************************'
        Dim UPID As Long
        UPID = Me.txtUPID.Text
        '************************************************************'
        '************************************************************'
        '       修正モードの時、データを取得
        '************************************************************'
        '************************************************************'
        If ADDUPFLG = 1 Then

            '//---コネクション
            Dim Mycn As New SqlConnection _
                ("Data Source=anp_sqlserver;" _
                 & "Initial Catalog=" & "PC固定資産管理システム" _
                 & ";User ID=sa;password=''")

            '//---アダプタ
            Dim MyAdapter As New SqlDataAdapter _
                ("select * from [TA1001_PCマスタ] " _
                 & "where ID=" _
                 & Me.txtUPID.Text & "", Mycn)

            '//---Datasetオブジェクト
            Dim MyDataSet As New DataSet
            Mycn.Open()

            '//---テーブル
            Dim MyTable As DataTable
            '************************************************************'
            '       接続開始
            '************************************************************'
            MyAdapter.Fill(MyDataSet, "TA1001_PCマスタ")
            MyTable = MyDataSet.Tables("TA1001_PCマスタ")
            '------------------------------------------------------------'
            '       データを追加
            '------------------------------------------------------------'
            Me.txtPC名.Text = MyTable.Rows(0)("PC名")
            Me.cboOS名.SelectedValue = MyTable.Rows(0)("OS名")
            Me.txt使用用途.Text = MyTable.Rows(0)("使用用途")
            Me.txt社員コード.Text = MyTable.Rows(0)("社員コード")
            Me.txt社員名.Text = MyTable.Rows(0)("社員名")
            Me.txtJobコード.Text = MyTable.Rows(0)("JOBコード")
            Me.txt固定資産コード.Text = MyTable.Rows(0)("固定資産管理コード")

            Me.txt納品日.Text = MyTable.Rows(0)("納品日")

            Me.cbo資産区分.Text = MyTable.Rows(0)("資産区分ID")
            If Not (MyTable.Rows(0)("搭載メモリ容量") Is System.DBNull.Value) Then
                Me.txt搭載メモリ容量.Text = MyTable.Rows(0)("搭載メモリ容量")
            End If

            If Not (MyTable.Rows(0)("搭載HDD容量") Is System.DBNull.Value) Then
                Me.txt搭載HDD容量.Text = MyTable.Rows(0)("搭載HDD容量")
            End If

            If Not (MyTable.Rows(0)("搭載CPU名ID") Is System.DBNull.Value) Then
                Me.cbo搭載CPU名.SelectedValue = MyTable.Rows(0)("搭載CPU名ID")
            End If

            If Not (MyTable.Rows(0)("搭載CPU周波数") Is System.DBNull.Value) Then
                Me.txt搭載CPU周波数.Text = MyTable.Rows(0)("搭載CPU周波数")
            End If

            If Not (MyTable.Rows(0)("機種区分ID") Is System.DBNull.Value) Then
                Me.cbo機種区分.SelectedValue = MyTable.Rows(0)("機種区分ID")
            End If

            Me.txt設置場所.Text = MyTable.Rows(0)("設置場所")

            Mycn.Close()

            '''''''''''''''''''''''''''''''''''''''''''''''''''''''''
            '
            '
            '
            '
            '
            '
            '       Jobコード名を取得
            '
            '
            '
            '
            '
            '
            '''''''''''''''''''''''''''''''''''''''''''''''''''''''''
            Dim JobCode As Long
            If Me.txtJobコード.Text <> "" Then
                JobCode = Me.txtJobコード.Text
                '//---コネクション
                Mycn = New SqlConnection("Data Source=anp_sqlserver;" _
                 & "Initial Catalog=" & "jinkenhisanteidb" _
                 & ";User ID=sa;password=''")
                Mycn.Open()

                '//---アダプタ
                MyAdapter = New SqlDataAdapter _
                    ("select * from [TA0002_原価計算グループマスタ] " _
                     & "where ID=" & JobCode, Mycn)

                '//---データセット
                MyDataSet = New DataSet

                '//---データテーブル
                MyTable = New DataTable
                '************************************************************'
                '       接続開始
                '************************************************************'
                MyAdapter.Fill(MyDataSet, "TA0002_原価計算グループマスタ")
                MyTable = MyDataSet.Tables("TA0002_原価計算グループマスタ")

                Me.txtJob.Text = MyTable.Rows(0)("JobName")

            End If

            Mycn.Close()
        End If

    End Sub

また、以下が書き込みイベントです。

    Protected Sub cmd登録_Click _
        (ByVal sender As Object, ByVal e As System.EventArgs) _
        Handles cmd登録.Click
        Dim ret As Integer
        ret = MsgBox("このデータで書き込んでもよろしいですか?", vbYesNo)
        If ret = vbNo Then
            Exit Sub
        End If

        '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
        '
        '
        '
        '
        '
        '
        '
        '       サーバに書込む
        '
        '
        '
        '
        '
        '
        '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
        '************************************************************'
        '       初期処理
        '************************************************************'

        '//---コネクション
        Dim Mycn As New SqlConnection _
            ("Data Source=anp_sqlserver;" _
             & "Initial Catalog=" & "PC固定資産管理システム" _
             & ";User ID=sa;password=''")
        Mycn.Open()
        Dim MyAdapter As SqlDataAdapter
        '//---データセット
        Dim MyDataSet As DataSet
        Dim MyTable As DataTable
        Dim Myrow As DataRow

        '//---更新したい固定資産ID
        Dim KoteishisanID As Long

        '//---自動生成コマンド(sqlcommandbuilderオブジェクト)を作成
        Dim Mycmd As SqlCommandBuilder
        
        
        
        
        
        
        '************************************************************'
        '************************************************************'
        '       更新モードの時、データを搾り出して更新
        '************************************************************'
        '************************************************************'
        If Me.txt入力モード.Text = 1 Then
            KoteishisanID = Me.txtUPID.Text
            MyDataSet = New DataSet()
            MyAdapter = New SqlDataAdapter _
                ("select * from [TA1001_PCマスタ] where ID=" _
                 & KoteishisanID, Mycn)
            MyAdapter.Fill(MyDataSet, "TA1001_PCマスタ")

            '//---tbに「TA1001_PCマスタ」をセット
            MyTable = MyDataSet.Tables("TA1001_PCマスタ")
            '--------------------------------------------------------'
            '       レコードを更新
            '--------------------------------------------------------'
            '//---行の更新開始
            MyTable.Rows(0).BeginEdit()
            '//---更新開始
            
            ※↓ここの処理が全く反応しません。
例えば「txtPC名」テキストボックスが元は「AA」と言う値が入っていたとします。「txtPC名」を「BB」と更新し、msgbox(me.txtPC名.text)命令を書き込んだ場合「AA」とでます。又、直接「MyTable.Rows(0)("PC名") = Me.txtPC名.Text」を「MyTable.Rows(0)("PC名") ="WWW"」と書き込んだ場合、サーバは更新されております。何か忘れてるコマンドがあるのでしょうか?

            MyTable.Rows(0)("PC名") = Me.txtPC名.Text
            MyTable.Rows(0)("OS名") = Me.cboOS名.SelectedValue
            MyTable.Rows(0)("使用用途") = Me.txt使用用途.Text
            MyTable.Rows(0)("社員コード") = Me.txt社員コード.Text
            MyTable.Rows(0)("社員名") = Me.txt社員名.Text
            MyTable.Rows(0)("JOBコード") = Me.txtJobコード.Text
            MyTable.Rows(0)("固定資産管理コード") = Me.txt固定資産コード.Text
            If Me.txt納品日.Text <> "" Then
                MyTable.Rows(0)("納品日") = CDate(Me.txt納品日.Text)
            End If
            MyTable.Rows(0)("資産区分ID") = Me.cbo資産区分.Text
            If Me.txt搭載メモリ容量.Text <> "" Then
                MyTable.Rows(0)("搭載メモリ容量") = Me.txt搭載メモリ容量.Text
            End If
            If Me.txt搭載HDD容量.Text <> "" Then
                MyTable.Rows(0)("搭載HDD容量") = Me.txt搭載HDD容量.Text
            End If
            MyTable.Rows(0)("搭載CPU名ID") = Me.cbo搭載CPU名.SelectedValue
            If Me.txt搭載CPU周波数.Text <> "" Then
                MyTable.Rows(0)("搭載CPU周波数") = Me.txt搭載CPU周波数.Text
            End If
            MyTable.Rows(0)("機種区分ID") = Me.cbo機種区分.SelectedValue
            MyTable.Rows(0)("設置場所") = Me.txt設置場所.Text

            '//---更新終了
            MyTable.Rows(0).EndEdit()

            '//---自動生成コマンド
            Dim MyCommand As New SqlCommandBuilder(MyAdapter)
            '//---SQLDataAdapterオブジェクトに自動生成コマンドをセット
            MyAdapter.UpdateCommand = MyCommand.GetUpdateCommand
            '//---SQLDataAdapterオブジェクトを更新
            MyAdapter.Update(MyDataSet, "TA1001_PCマスタ")

            '//---終了メッセージ
            MsgBox(Me.txtPC名.Text _
                    & "  の更新処理が完了しました!システムを終了します.")
        End If
        '************************************************************'
        '************************************************************'
        '       新規の行を作成(新規追加モードの時)
        '************************************************************'
        '************************************************************'

        If Me.txt入力モード.Text = 0 Then
            MyDataSet = New DataSet()
            '//---Datasetオブジェクトにデータをバインド
            MyAdapter = _
                New SqlDataAdapter("select * from [TA1001_PCマスタ]", Mycn)
            MyAdapter.Fill(MyDataSet, "TA1001_PCマスタ")

            '//---tbに「TA1001_PCマスタ」をセット
            MyTable = MyDataSet.Tables("TA1001_PCマスタ")

            Myrow = MyTable.NewRow()
            '--------------------------------------------------------'
            '       データを追加
            '--------------------------------------------------------'
            Myrow("PC名") = Me.txtPC名.Text
            Myrow("OS名") = Me.cboOS名.SelectedValue
            Myrow("使用用途") = Me.txt使用用途.Text
            Myrow("社員コード") = Me.txt社員コード.Text
            Myrow("社員名") = Me.txt社員名.Text
            If Me.txtJobコード.Text <> "" Then
                Myrow("JOBコード") = Me.txtJobコード.Text
            End If
            If Me.txt固定資産コード.Text <> "" Then
                Myrow("固定資産管理コード") = Me.txt固定資産コード.Text
            End If

            If Me.txt納品日.Text <> "" Then
                Myrow("納品日") = CDate(Me.txt納品日.Text)
            End If

            Myrow("資産区分ID") = Me.cbo資産区分.Text
            If Me.txt搭載メモリ容量.Text <> "" Then
                Myrow("搭載メモリ容量") = Me.txt搭載メモリ容量.Text
            End If

            If Me.txt搭載HDD容量.Text <> "" Then
                Myrow("搭載HDD容量") = Me.txt搭載HDD容量.Text
            End If

            Myrow("搭載CPU名ID") = Me.cbo搭載CPU名.SelectedValue
            If Me.txt搭載CPU周波数.Text <> "" Then
                Myrow("搭載CPU周波数") = Me.txt搭載CPU周波数.Text
            End If

            Myrow("機種区分ID") = Me.cbo機種区分.SelectedValue
            Myrow("設置場所") = Me.txt設置場所.Text

            '//---行を更新
            MyTable.Rows.Add(Myrow)

            Mycmd = New SqlCommandBuilder(MyAdapter)

            '//---sqlDataAdapterオブジェクトに自動生成コマンドをセット
            MyAdapter.InsertCommand = Mycmd.GetInsertCommand

            '//---sqlDataadapterオブジェクトを更新
            MyAdapter.Update(MyDataSet, "TA1001_PCマスタ")
            MsgBox(Me.txtPC名.Text & "  の新規追加処理が完了しました!システムを終了します.")
        End If

        Mycn.Close()
        Response.Redirect("toppage.aspx")

    End Sub


aetos  2008-10-21 23:42:11  No: 145318

リンク張っておきますね。
http://bbs.wankuma.com/index.cgi?mode=al2&namber=26794


ながなが  2008-10-22 20:34:29  No: 145319

別の掲示板で解決いたしました。
ありがとうございます。


※返信する前に利用規約をご確認ください。




  


  このエントリーをはてなブックマークに追加