仅保存如果进行了更改

时间:2016-08-18 11:06:46

标签: vb.net

我的表单上有一个“保存”按钮,用于将数据保存到数据库,我想为&#34创建一个简短的代码;不保存任何内容"如果用户没有进行更改,因为保存涉及很多Textbox / Combobox / DateTimePicker值。

换句话说,我可以使用任何不同的解决方案,而不是像这样:

 Using con As OracleConnection = New OracleConnection("Data Source=MyDB;User Id=Lucky;Password=MyPassword;")

            con.Open()

            Using cmd As OracleCommand = New OracleCommand()

    Const SQL As String = "INSERT INTO MYTable (Field1,Field2,Field3 etc.) VALUES(: example1, : example2,: example3, etc.)"

                cmd.Connection = con
                cmd.Parameters.Add(New OracleParameter(": example1",Textbox1.Text ))
                cmd.Parameters.Add(New OracleParameter(": example2",Textbox2.Text ))
                cmd.Parameters.Add(New OracleParameter(": example3",Textbox3.Text ))

                cmd.CommandText = SQL

                If Textbox1.text="" And Textbox2.text="" And Textbox3.text="" Then
                'Do nothing
                Else
                cmd.ExecuteNonQuery()
                MessageBox.Show("Saved successfully")
                End if

            End Using

 End Using

目前我的代码保存到DB,即使文本框是空白的 - 所以可能会插入空字符串。

1 个答案:

答案 0 :(得分:0)

首先,您可以简单地使用您的代码

If Textbox1.text="" And Textbox2.text="" And Textbox3.text="" Then
  'Do nothing
  Else
  cmd.ExecuteNonQuery()
  MessageBox.Show("Saved successfully")
End if

If Not (Textbox1.text="" And Textbox2.text="" And Textbox3.text="") Then 
      cmd.ExecuteNonQuery()
      MessageBox.Show("Saved successfully")
End if

或者

If Textbox1.text="" And Textbox2.text="" And Textbox3.text="" Then Exit Sub
cmd.ExecuteNonQuery()
MessageBox.Show("Saved successfully")

解决其余问题的一种可能方法是事件+标志。给每个控件一个监听器(Textchanged,ValueChanged,..取决于控件)。如果它触发,则将标记Changes made从默认False设置为True

最后检查Changes made是否为True - 如果是,则将其保存到数据库。

否定:如果用户放置了一些文本并在之后将其删除,则该标志仍然为真 - 但您可以在许多应用程序中看到此行为。