gpt4 book ai didi

mysql - 从选择查询插入值数组 mysql vb.net

转载 作者:行者123 更新时间:2023-11-29 11:42:15 28 4
gpt4 key购买 nike

我有一个应用程序显示某个引用的移动目标。我有很多引用资料,分三类(上午、下午、晚上)该应用程序运行良好,但现在我想在每个轮类开始时重置所有引用的轮类目标计数器。我的意思是,当时钟是早上 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()

有人可以告诉我我做错了什么吗?

更新:这是我从选择查询中得到的(也是预期的): enter image description here

这是我想要重置计数器的表: enter image description here

所以,想象一下,当实际时间是早上 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,...)。
  • 当使用带有绑定(bind)参数的准备好的语句时,请确保使用AddWithValue 仅在循环外一次,并将其设置在循环中参数("@ID").Value = item
  • 由于代码是在每秒滴答一次的计时器事件中执行的,因此
    可能直到下一个定时器第一次执行才完成滴答声。如果您想安全并同步地运行代码,请确保当前的执行不会受到干扰,例如设置 Timer.Enabled= False 位于函数的开头和函数之后的 Timer.Enabled=True完成的。或者只是将计时器刻度设置得足够高(d'oh)。

关于mysql - 从选择查询插入值数组 mysql vb.net,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35576660/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com