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