Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在vb.NET中更改字段时更新记录的最佳方法_Sql_Vb.net - Fatal编程技术网

Sql 在vb.NET中更改字段时更新记录的最佳方法

Sql 在vb.NET中更改字段时更新记录的最佳方法,sql,vb.net,Sql,Vb.net,我正在做一个项目,用户可以修改记录。因此,基本上是一个表单加载,大约有15个字段(文本框、组合框等)。用户可以编辑该表单上的任何或所有字段。我创建了一个函数,将原始值(在form_Load上)保存到.tag属性。然后,当用户试图保存它时,我比较control.tag=control.text并查看值是否已更改。它能识别最小的变化,工作起来很不愉快。现在我正在尝试更新SQL SErver中的这些更改,但我不确定最好的方法是什么。我试图创建一个参数化查询来更新每个字段,但在这种情况下,我应该将每个值

我正在做一个项目,用户可以修改记录。因此,基本上是一个表单加载,大约有15个字段(文本框、组合框等)。用户可以编辑该表单上的任何或所有字段。我创建了一个函数,将原始值(在form_Load上)保存到.tag属性。然后,当用户试图保存它时,我比较control.tag=control.text并查看值是否已更改。它能识别最小的变化,工作起来很不愉快。现在我正在尝试更新SQL SErver中的这些更改,但我不确定最好的方法是什么。我试图创建一个参数化查询来更新每个字段,但在这种情况下,我应该将每个值的.tag与.text进行比较,如果不同,则将参数传递给update语句……我的意思是

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