Sql 在vb.NET中更改字段时更新记录的最佳方法
我正在做一个项目,用户可以修改记录。因此,基本上是一个表单加载,大约有15个字段(文本框、组合框等)。用户可以编辑该表单上的任何或所有字段。我创建了一个函数,将原始值(在form_Load上)保存到.tag属性。然后,当用户试图保存它时,我比较control.tag=control.text并查看值是否已更改。它能识别最小的变化,工作起来很不愉快。现在我正在尝试更新SQL SErver中的这些更改,但我不确定最好的方法是什么。我试图创建一个参数化查询来更新每个字段,但在这种情况下,我应该将每个值的.tag与.text进行比较,如果不同,则将参数传递给update语句……我的意思是Sql 在vb.NET中更改字段时更新记录的最佳方法,sql,vb.net,Sql,Vb.net,我正在做一个项目,用户可以修改记录。因此,基本上是一个表单加载,大约有15个字段(文本框、组合框等)。用户可以编辑该表单上的任何或所有字段。我创建了一个函数,将原始值(在form_Load上)保存到.tag属性。然后,当用户试图保存它时,我比较control.tag=control.text并查看值是否已更改。它能识别最小的变化,工作起来很不愉快。现在我正在尝试更新SQL SErver中的这些更改,但我不确定最好的方法是什么。我试图创建一个参数化查询来更新每个字段,但在这种情况下,我应该将每个值
Update tbl1 Set Dept = @Dept
if dept.tag = dept.text
cmd.parameters.addwithvalue(@Dept, sqldptype.text)=txtdept.text
End if
如果这是错误的,有人有什么想法吗
除了检查值是否不同之外,还有其他方法吗?我觉得这很乏味?那么,我是否应该更新所有字段,只要“某些”字段发生了更改
试图找到一个最好的方法来做到这一点…这是我的功能,检查字段是否在更新时不同
Private Function isDirty() As Boolean
IsDirty = False
For Each ctr As Control In grpClientInfo.Controls
If TypeOf ctr Is TextBox Then
If ctr.Tag.ToString <> ctr.Text Then
IsDirty = True
End If
ElseIf TypeOf ctr Is ComboBox Then
If ctr.Tag.ToString <> ctr.Text Then
IsDirty = True
End If
ElseIf TypeOf ctr Is MaskedTextBox Then
If ctr.Tag.ToString <> ctr.Text Then
IsDirty = True
End If
ElseIf TypeOf ctr Is RichTextBox Then
If ctr.Tag.ToString <> ctr.Text Then
IsDirty = True
End If
End If
Next
End Function
最简单的方法是让DB提供程序来完成这项工作:
myDA.Update(myDT)
。DataAdapter将根据需要添加、删除和更新所有行。不需要新的SQL。(DA/DT将为您完成所有跟踪)带有cmd.parameters.addwithvalue(@Dept,sqldptype.text)=txtdept.text
的轻微语法问题。应该是cmd.Parameters.Add(“@Dept”,SqlDbType.Text)。Value=txtdept.Text
。值得注意的是,如果你沿着这条路线走下去……或者甚至cmd.Parameters.Add(@Dept,sqldptype.text)。Value=txtdept.text
@Jinx88909谢谢,是的,我只是从内存中键入它。我想在数据表上也显示了一些flering等。您可以轮询表以查看是否有更改,而不是测试每个字段。此外,更新可以“批量”发送5次删除、3次更新和7次添加。最简单的方法是让您的数据库提供商完成这项工作:myDA.Update(myDT)
。DataAdapter将根据需要添加、删除和更新所有行。不需要新的SQL。(DA/DT将为您完成所有跟踪)带有cmd.parameters.addwithvalue(@Dept,sqldptype.text)=txtdept.text
的轻微语法问题。应该是cmd.Parameters.Add(“@Dept”,SqlDbType.Text)。Value=txtdept.Text
。值得注意的是,如果你沿着这条路线走下去……或者甚至cmd.Parameters.Add(@Dept,sqldptype.text)。Value=txtdept.text
@Jinx88909谢谢,是的,我只是从内存中键入它。我想在数据表上也显示了一些flering等。您可以轮询表以查看是否有更改,而不是测试每个字段。此外,更新可以“批处理”,一次发送5次删除、3次更新和7次添加
if isDirty() then
MsgBox "You've made changes....blah blah saving now....
CALL ThisNewUpdateFunction 'yet to be written
else
MSgboX "no changes"
End if