Sql server VB.net在插入数据时存在循环问题

Sql server VB.net在插入数据时存在循环问题,sql-server,vb.net,Sql Server,Vb.net,我有一个datagridview,其中有列结尾、PumpNo、NozzleNo、TankID。 datagridview中的数据示例: 这是一个插入的示例。在第一次插入时,打开将设置为0: 当您第二次插入时,它应该在datagridview中循环并获取所有详细信息并将它们保存到数据库中。然后,从数据库中的过去记录中按desc选择前1个结束顺序,这将是第2次插入的开始。请参见下面的黄色突出显示的图片: 问题是 我刚刚从上一张唱片中得到了结尾。如下图所示,其中所有端点均为8.9 我想我应该在插

我有一个datagridview,其中有列
结尾、PumpNo、NozzleNo、TankID
。 datagridview中的数据示例:

这是一个插入的示例。在第一次插入时,
打开
将设置为0:

当您第二次插入时,它应该在datagridview中循环并获取所有详细信息并将它们保存到数据库中。然后,
从数据库中的过去记录中按desc选择前1个结束顺序,这将是第2次插入的开始。请参见下面的黄色突出显示的图片:

问题是

我刚刚从上一张唱片中得到了
结尾。如下图所示,其中所有端点均为8.9

我想我应该在插入之前先进行筛选,比如
pumpno=@pumpno和nozzleno=@nozzleno和TankID=@TankID
,这样当我插入到表中时,我将根据筛选得到指定的前1个结尾

我的代码:

Dim结尾为十进制
'这是我选择前1个结尾的代码
SelectQuery=“选择以数字TB结尾的前1名,其中PumpNo=@Pump1和NozzleNo=@Nozzle1和TankID=@Tank1订单以结束DESC”
cmd=newsqlcommand
使用cmd
.Connection=Connections.cn
.CommandText=SelectQuery
.Parameters.Add(新的SqlParameter(“@Pump1”,SqlDbType.NVarChar,10))
.Parameters.Add(新的SqlParameter(“@Nozzle1”,SqlDbType.NVarChar,10))
.Parameters.Add(新的SqlParameter(“@Tank1”,SqlDbType.NVarChar,100))
Dim pump1作为字符串=字符串。空
将喷嘴调暗为字符串=字符串。空
Dim tankid为String=String.Empty
我在datagridview中在此循环,以便在选择以select查询结尾的top 1时用作我的筛选器:

dgvDigital.Rows中作为DataGridViewRow的每一行的

pump1=行单元格(1).值
喷嘴=行单元格(2).值
tankid=行。单元格(3)。值
.参数(“@Pump1”)。值=Pump1
.参数(“@Nozzle1”)。值=喷嘴
.Parameters(“@Tank1”)。值=tankid
.ExecuteNonQuery()
然后使用sqlreader,我将读取从
selecttop1ending
查询中获得的所有内容。在这一部分中,当我
msgbox(ending)
时,它工作得很好,但当我将insert放在这里时,它将首先在第一行中选择top 1,然后insert和loop在这里不工作

使用读取为SqlDataReader=cmd.ExecuteReader
如果读,那么读
结束=读(“结束”)
read.Close()
'Msgbox(结束)
如果结束
终端使用
下一个
以
这是我的插入代码,我从表中获取详细信息并将其插入数据库。我希望这里有一个过滤器:

插入代码 InsertQuery=“插入到DigitalTB(PumpNo、NozzleNo、TankID、开始、结束、读取类型、用户移位、日期、时间)”& 值(@PumpNo1、@NozzleNo1、@TankID1、@Opening1、@Ending1、@ReadingType1、@UserShift1、@Date1、@Time1) cmd=newsqlcommand 使用cmd .Connection=Connections.cn .CommandText=InsertQuery .Parameters.Add(新的SqlParameter(“@Ending”,SqlDbType.Decimal)) .Parameters.Add(新的SqlParameter(“@PumpNo”,SqlDbType.NVarChar,10)) .Parameters.Add(新的SqlParameter(“@NozzleNo”,SqlDbType.NVarChar,10)) .Parameters.Add(新的SqlParameter(“@TankID”,SqlDbType.NVarChar,100)) .Parameters.AddWithValue(“@Opening”,Ending)”这部分是我从结尾插入顶部1的地方 .Parameters.AddWithValue(“@UserShift”,Interfacefrm.lblUserInterface.Text) .Parameters.AddWithValue(“@ReadingType”,“Fuel”) .Parameters.AddWithValue(“@Date”,Date.Now.toSortDateString)”我将其另存为字符串 .Parameters.AddWithValue(“@Time”,Date.Now.toSortTimeString)”我将其另存为字符串 以 对于i As Integer=0到Me.dgvDigital.Rows.Count-1 使用cmd .Parameters(0).Value=Me.dgvDigital.Rows(i).Cells(0).Value .Parameters(1).Value=Me.dgvDigital.Rows(i).Cells(1).Value .Parameters(2).Value=Me.dgvDigital.Rows(i).Cells(2).Value .Parameters(3).Value=Me.dgvDigital.Rows(i).Cells(3).Value .ExecuteNonQuery() 以 下一个 MsgBox(“成功插入”)
我已经回答了我的问题。通过使用子查询在我的值中选择以获得我想要的输出

Connections.connect()
InsertQuery=“插入到DigitalTB(PumpNo、NozzleNo、TankID、开始、结束、读取类型、用户移位、日期、时间)”&
“值(@PumpNo1、@NozzleNo1、@TankID1),@Ending1、@ReadingType1、@UserShift1、@Date1、@Time1)从数字TB中选择前1个结尾,其中PumpNo=@PumpNo1和NozzleNo=@NozzleNo1和TankID=@TankID1以结束描述),@Ending1、@ReadingType1、@UserShift1、@Date1、@Time1”
cmd=newsqlcommand
使用cmd
.Connection=Connections.cn
.CommandText=InsertQuery
.Parameters.Add(新的SqlParameter(“@Ending1”,SqlDbType.Decimal))
.Parameters.Add(新的SqlParameter(“@PumpNo1”,SqlDbType.NVarChar,10))
.Parameters.Add(新的SqlParameter(“@NozzleNo1”,SqlDbType.NVarChar,10))
.Parameters.Add(新的SqlParameter(“@TankID1”,SqlDbType.NVarChar,100))
“.Parameters.Add(newSQLParameter(“@Opening1”,end))”这部分是我从en插入前1的地方
PumpNo    NozzleNo    TankID       Ending

   1          1       1-BIODIESEL  *This part is where user input ending for every pumpno, nozzle, and tankid*