2016-08-18 82 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