これは、単純なビジュアル ベーシック Windows フォーム アプリケーションです。データベースは、ローカルの sqlserver データベースです。
タスクは、ID、dateTime、onOff、param の 4 つの列を持つテーブルを通過することです。
ID は特定のデバイスに固有です。dateTime はイベントが発生したときのタイムスタンプです。onOff は文字列「on」または「off」のいずれかで、param は整数で一意ではありません。
各 ID について、最初の行が ID 23 で "on" で param が 6 であるとします。その ID が 23 で param が 6 の一致する "off" 行を見つけ、dateTime の差を計算して、 ID がオンまたはオフであった期間。
これは、テーブル内のすべての ID (約 1,000 万行) に対して行う必要があります。各 ID には複数のオン/オフのペアがあります。重要なのは、dateTime に関して最も近いものを見つけることです。
私は、データテーブルやデータセットから、すべてを csv にプッシュして一度にブロック単位で読み戻すまで、これを無駄にするいくつかの方法を調べて試しました。これを行うための最良の方法は何ですか?また、あなたの手順は何ですか?
次のコードでは、ユーザーが開始日と終了日を選択すると、正しいデータがデータテーブルに配置されます。次に、上記のように行を一致させるタスクを実行する必要があります。
Dim sConnectionString As String
sConnectionString = "Data Source=[servername];Initial Catalog=[tabelname];Integrated Security=True"
Dim objConn As New SqlConnection(sConnectionString)
objConn.Open()
Dim ID As String
ID = TextBox1.Text
Dim startDate As Date
startDate = DateTimePicker1.Value.Date
Dim endDate As Date
endDate = DateTimePicker2.Value.Date
Dim strSql As String = "SELECT ID, dateTime, onOff, param FROM signalRaw WHERE CAST (dateTime as DATE) between '" & startDate & "' AND '" & endDate & "'"
Dim dasignalRawComma As New SqlDataAdapter(strSql, objConn)
Dim dtb As New DataTable
dasignalRawComma.Fill(dtb)