データベースのテーブルからフィールドを読み取るのにVB.Netを使用しています。タイマーは、5秒ごとにそのフィールドの値を読み取るようにスケジュールされています。私はテーブル内の値を取得するためにデータアダプタを使用しています、そのテーブルの最初の行の最初の要素は私のデータです。 私が観察しているのは、私がforループ内のデータを読むとうまくいきます。そのフィールド値の外部変更は、そのデータを格納する変数に反映されます。しかし、最初の行のインデックス0の要素を直接読み取った場合、変数は外部的にデータベースに加えられた変更を反映しません。VB.netのデータベースから更新されたレコードを読み取る
'----declaration---
Dim query2 As String = "SELECT Data2 FROM DSSControl WHERE StationID LIKE 1"
Dim MDBConnString_ As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=F:\DrumScanningSystem.mdb;;"
Dim ds As New DataSet
Dim cnn As OleDbConnection = New OleDbConnection(MDBConnString_)
'-----use in timer
If cnn.State = ConnectionState.Closed Then
cnn.Open()
End If
Dim cmd1 As New OleDbCommand(query2, cnn)
Dim da2 As New OleDbDataAdapter(cmd1)
da2.Fill(ds, "DSSControl")
Dim t2 As DataTable = ds.Tables("DSSControl")
Dim row2 As DataRow
Dim flagvar As UInteger
For Each row2 In t2.Rows
flagvar = CUInt(row2(0))
Next
これが正常に動作しますが、私は
row2 = t2.Rows(0)
flagvar = CInt(row2(0))
を使用している場合代わりにforループのこれは「flagvar」事前に 感謝の変化を反映していません!
私はあなたが何を求めているのか正確には分かりません。 2つのコードスニペットは比較できません。 1行はすべての行をループし、 'flagvar'は* last *値だけを保持します。 2番目のものは最初の行を見るだけです。あなたはそのコードの大部分を必要としません。 DataAdapterを構築して保持する場合は、単に更新するだけです。 – Plutonix