2017-09-21 14 views
0

データベースのテーブルからフィールドを読み取るのに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」事前に 感謝の変化を反映していません!

+0

私はあなたが何を求めているのか正確には分かりません。 2つのコードスニペットは比較できません。 1行はすべての行をループし、 'flagvar'は* last *値だけを保持します。 2番目のものは最初の行を見るだけです。あなたはそのコードの大部分を必要としません。 DataAdapterを構築して保持する場合は、単に更新するだけです。 – Plutonix

答えて

0

flagvar = CUInt(row2(0))に修正してください、あなたはこの問題

(INTEGER

整数(整数)2^31までから-2^31(-2147483648)のデータであるflagvar = CInt(row2(0)) .Perhapsにデータを失います - 1(2,147,483,647)。ストレージのサイズは4バイトである。

UINTEGER

符号なし整数(整数)0から2^32を介してデータ(4294967295)ストレージのサイズは4バイトである。)

おそらくあなたは負でない値に興味があります

関連する問題