簡體   English   中英

從選擇查詢mysql vb.net插入值數組

[英]Insert Array of values from Select query mysql vb.net

我有一個顯示特定參考的轉換目標的應用程序。 我將很多參考分為3個班次(上午,下午,晚上),該應用程序運行良好,但現在我想在每個班次開始時為所有參考重新設置班次目標的計數器。 我的意思是,當時鍾是上午6點時,所有早上的班次都應將計數器設置為0。我有以下代碼,但無法正常工作。 缺少某些東西,我被卡住了。

Dim rtime As New TimeSpan(0, 0, CInt(requestddate.TimeOfDay.TotalSeconds))


        hora1 = New TimeSpan(6, 0, 0)
        hora2 = New TimeSpan(14, 0, 0)
        hora3 = New TimeSpan(22, 0, 0)

        ConnectDatabase()

        If rtime = hora1 Then

            count = 0

            Try

                With cmd4
                    .Connection = conn
                    .CommandText = "Select ShiftTarget.IDShiftTarget from ShiftTarget, turnos, linhas WHERE ShiftTarget.IDLinha = linhas.IDLinha and ShiftTarget.IDTurno = turnos.IDTurno And turnos.Descricao = 'Manha' And linhas.NomeLinha = '" & GlobalVariables.linha & "'"
                End With

                While objReader.Read()
                listaIDs.Add(objReader("IDShiftTarget").ToString())
            End While

            objReader.Close()

            DisconnectDatabase()

            ConnectDatabase()

            With cmd1
                .Connection = conn
                .CommandText = "INSERT into contador (IDShiftTarget, Data, Contador) VALUES (@ID, @date, @cont)"
                For Each item As String In listaIDs
                    MsgBox(item)
                    .Parameters.AddWithValue("@ID", item)
                    .Parameters.AddWithValue("@date", data.ToString("yyyy-MM-dd"))
                    .Parameters.AddWithValue("@cont", count)
                    .ExecuteNonQuery()
                Next
            End With

        Catch ex As Exception
            If ex.InnerException IsNot Nothing Then
                MsgBox(ex.InnerException)
            End If
        End Try

        DisconnectDatabase()

有人可以告訴我我在做什么錯嗎?

更新:這是我從選擇查詢中得到的(也是預期的): 在此處輸入圖片說明

這是我要重置計數器的表: 在此處輸入圖片說明

因此,想象一下,當實際時間是上午6點時,我想插入類似以下內容:

IDContador   IDShiftTarget      Data      Contador
11933          32           2016-02-23       0
11934          19           2016-02-23       0
11935          20           2016-02-23       0
11936          35           2016-02-23       0

我不能簡單地重置為0,其中idshifttarget等於19、20、32、35,因為那樣會重置所有記錄,並且我想將它們保留在表中。 我需要檢查MAX(ID),其中shiftTarget是我在數組中獲得的值,然后將Contador設置為0。

更新:

我已經在代碼中進行了更改:

While objReader.Read()
                listaIDs.Add(objReader("IDShiftTarget").ToString())
            End While

            objReader.Close()

            DisconnectDatabase()

            ConnectDatabase()

            With cmd1
                .Connection = conn
                .CommandText = "INSERT into contador (IDShiftTarget, Data, Contador) VALUES (@ID, @date, @cont)"
                For Each item As String In listaIDs
                    MsgBox(item)
                    .Parameters.AddWithValue("@ID", item)
                    .Parameters.AddWithValue("@date", data.ToString("yyyy-MM-dd"))
                    .Parameters.AddWithValue("@cont", count)
                    .ExecuteNonQuery()
                Next
            End With

        Catch ex As Exception
            If ex.InnerException IsNot Nothing Then
                MsgBox(ex.InnerException)
            End If
        End Try

        DisconnectDatabase()

使用此代碼,我只能看到第一個ID,在控制台中,我會收到下一個錯誤:拋出異常:MySql.Data.dll中的'System.InvalidOperationException'

您的代碼中有些東西會導致錯誤的行為:

  • 在循環通過DataReader時不能執行CRUD操作:創建一個列表以存儲IDShiftTargets ,關閉DataReader,然后在列表中循環並執行Insert語句。
  • 請注意,數據庫列的數據類型與代碼數據類型(IDShiftTarget int / Integer,IDShiftTarget date / DateTime等)匹配。
  • 當使用帶有綁定參數的預備語句時,請確保僅在循環外部使用AddWithValue一次,並在循環中使用Parameter("@ID").Value = item
  • 由於代碼是在計時器事件中執行的,該事件每秒鍾滴答一次,因此它是
    可能直到下一個計時器計時才完成第一次執行。 如果要安全運行代碼並進行同步,請確保不干擾當前執行,例如,在函數開始處設置Timer.Enabled= False ,在函數完成后設置Timer.Enabled=True 或者只是將計時器刻度線設置得足夠高( d'oh )。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM