2016-08-18 41 views
0

我的表单上有一个保存按钮,用于将数据保存到数据库,并且我想创建一个“不保存任何内容”的短代码如果用户没有进行更改,因为保存涉及很多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 

目前我的代码保存到数据库,即使文本框是空白的 - 所以大概空字符串插入。

回答

0

首先,你可以simplyfy代码

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,..取决于控件)。如果火灾从默认False设置一个标志Changes madeTrue

最终检查Changes madeTrue - 如果有的话,然后将其保存到数据库。

负:如果用户将一些文本并删除它之后的标志仍然会是真的 - 但是你可以看到在很多应用中这种行为。

+0

卢克,你能告诉我一些国旗的例子吗?感谢帮助 ! – LuckyLuke82

+0

作为布尔值的实例变量。 – Luke

+0

啊哈,现在我找你。再次感谢您的帮助! – LuckyLuke82