【发布时间】:2017-01-16 10:55:54
【问题描述】:
我在一个项目中有一个表单,上面有 2 UltraGrids。一个显示合约信息,另一个包含模块信息。
例如,在合同网格中,可能有 3 行,每行都有一个唯一的合同 ID。单击一行时,它会使用根据该合同分配的模块填充模块网格。
我需要做的是更新数据库中contactID与所选合同行中的ID匹配的模块。
我目前的代码是
For Each ugr As UltraGridRow In ugModules.Rows
For Each ur As UltraGridRow In ugContracts.Rows
mID = ugr.Cells("ModuleID").Text
mName = ugr.Cells("ModuleName").Text
numUsers = ugr.Cells("NumberUsers").Text
sql = "UPDATE dbo.tblModules SET ModuleName = ?, NumberUsers = ? WHERE ContractID = ? AND ModuleID = ?"
cmd = New OleDbCommand(sql, con)
cmd.Parameters.Add("@mname", OleDbType.VarChar).Value = mName
cmd.Parameters.Add("@numusers", OleDbType.VarChar).Value = numUsers
cmd.Parameters.Add("@conID", OleDbType.Integer).Value = ur.Cells("ContractID").Value
cmd.Parameters.Add("@mid", OleDbType.Integer).Value = mID
If cmd.ExecuteNonQuery() = 0 Then
sql = "INSERT INTO dbo.tblModules(ModuleID, ModuleName, NumberUsers, ContractID) VALUES(?, ?, ?, ?)"
cmd = New OleDbCommand(sql, con)
cmd.Parameters.Add("@mid", OleDbType.Integer).Value = mID
cmd.Parameters.Add("@mname", OleDbType.VarChar).Value = mName
cmd.Parameters.Add("@numusers", OleDbType.VarChar).Value = numUsers
cmd.Parameters.Add("@conID", OleDbType.Integer).Value = ur.Cells("ContractID").Value
cmd.ExecuteNonQuery()
End If
Next
Next
此代码的问题在于,它试图从与当前客户关联的每个合同中更新每个模块,这会导致 ID 字段发生冲突。
有没有办法修改此代码,使其仅更新具有正在编辑的contractID的记录,而不是显示在联系人表中的所有合同ID?
(抱歉,这有点难以解释,如果是外壳混淆,很高兴澄清任何事情)
【问题讨论】:
标签: sql vb.net infragistics ultrawingrid