|
分類:[.NET 全般]
環境
WindowsXP
VB2005
SQLserver2008
お世話になります。
職場でOracleとVBで開発をしており、復習を兼ねて
家で簡単なシステムを作っているのですが、
家ではSQLServerの為もあるのか、うまくいかないので
ご教授願います。
DataGridViewにDBのデータを表示させていまして、
値を変更して更新ボタンを押すとDBに更新させるという処理が
どうもうまくいきません。。(最下行の値のみ更新されています)
DataGridViewには以下の列があり、修正可能項目はCASEとBIKOUです。
No Cd CASE BIKOU
DBのテーブルには更新日付項目(UPDATEDT)を設けており、
更新を行った日時を設定するようにしています。
Noは数値で、あとは文字扱いです。
テストデータとして、3行分表示させており、
CASEとBIKOUの値を3行共変えて更新しますと、
最下行のCASEとBIKOUの値のみ更新されている状態です。
以下コードです。
Private Sub btnF6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnF6.Click
Dim con As SqlConnection
Dim sql As String
Dim adapter As SqlDataAdapter
Dim commandBuilder As SqlCommandBuilder
Dim dataTable As New DataTable()
Dim row As DataRow = Nothing
Dim dateNow As DateTime = DateTime.Now
Dim rows() As DataRow
Dim No As Integer
Dim Cd As String
Dim i As Integer
Dim j As Integer
con = New SqlConnection()
'Using con
'---<< 接続文字列の設定>>---
con.ConnectionString = _
"Data Source=.\SQLEXPRESS;" & _
"AttachDbFilename=" & _
"""C:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\DATA\Test.mdf"";" & _
"Integrated Security=True;" & _
"Connect Timeout=30;" & _
"User Instance=True"
'DBを開く
con.Open()
For i = 0 To DataGridView.RowCount - 1
'No
No = DataGridView("No", i).Value
'倉庫コード
Cd = DataGridView("Cd", i).Value
'SQL文の作成
sql = "SELECT * FROM TESTTABLE WHERE No = " & No & _
" AND Cd = " & "'" & Cd & "'"
Next
adapter = New SqlDataAdapter()
adapter.SelectCommand = New SqlCommand(sql, con)
adapter.SelectCommand.CommandType = CommandType.Text
adapter.Fill(dataTable)
'更新コマンドの作成
commandBuilder = New SqlCommandBuilder(adapter)
For j = 0 To DataGridView.RowCount - 1
'No
No = DataGridView("No", j).Value
'コード
Cd = DataGridView("Cd", j).Value
adapter = New SqlDataAdapter()
adapter.SelectCommand = New SqlCommand(sql, con)
adapter.SelectCommand.CommandType = CommandType.Text
adapter.Fill(dataTable)
'更新コマンドの作成
commandBuilder = New SqlCommandBuilder(adapter)
rows = dataTable.Select()
If rows.Count > 0 Then
'既存行の取得
row = dataTable.Rows(0)
row.BeginEdit()
Else
End If
'' データのセット
row("CASE") = DataGridView("CASE", j).Value
row("BIKOU") = DataGridView("BIKOU", j).Value
row("UPDATEDT") = dateNow
If rows.Count > 0 Then
row.EndEdit()
Else
End If
' データの更新
adapter.Update(dataTable)
Next
MsgBox("データを更新しました。")
con.Close()
End Sub
|