2011-12-23 28 views
0

我創建了一個表單來更新訪問數據庫表。我的問題是,當文本框中的文本發生更改並且表單被提交時,.text的值與datareader在頁面加載事件中加載它們時的值保持不變。我如何提交用戶更新的值,而不是頁面加載時已存在的值。從pageload事件更改文本框的值,提交新值問題

代碼:

 Public Property vehicleid As Integer 
      Public Property connstring As String = "myconnectionstring..." 
     Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
    vehicleid = Integer.Parse(Request.QueryString("vehicID")) 
     Dim svEnterdate, stocknum, make, model, color As String 

       Dim conn As New OleDbConnection(connstring) 
       Dim sql As String = "select * from vehicle where [email protected]" 
       Dim cmd As New OleDbCommand(sql, conn) 
       cmd.Parameters.AddWithValue("@vid", vehicleid) 
       conn.Open() 
       Dim dr As OleDbDataReader = cmd.ExecuteReader 

       While dr.Read 
        svEnterdate = dr("enterdate").ToString() 
        stocknum = dr("stock_num").ToString() 
        make = dr("make").ToString() 
        model = dr("model").ToString() 
        color = dr("color").ToString() 
       End While 
       conn.Close() 
       EnterDateTXT.Text = svEnterdate 
       StockNumTXT.Text = stocknum 
       MakeTxt.Text = make 
       ModelTXT.Text = model 
       ColorTxt.Text = color 
     End Sub 

'inbetween these 2 events the user can manipulate all the controls .text values, yet the 
' .text values of the submitted controls below are the same as the ones filled by the 
'datareader 

     Protected Sub SubmitBTN_Click(ByVal sender As Object, ByVal e As EventArgs) Handles SubmitBTN.Click 
      Dim conn As New OleDbConnection(connstring) 
       Dim sql As String = "UPDATE Vehicle" & _ 
        " SET [email protected], [email protected], [email protected], [email protected], [email protected] " & _ 
        "WHERE [email protected]" 
       Dim cmd As New OleDbCommand(sql, conn) 
       cmd.Parameters.AddWithValue("@vid", vehicleid) 
       cmd.Parameters.AddWithValue("@stock", StockNumTXT.Text) 
       cmd.Parameters.AddWithValue("@make", MakeTxt.Text) 
       cmd.Parameters.AddWithValue("@model", ModelTXT.Text) 
       cmd.Parameters.AddWithValue("@color", ColorTxt.Text) 
       cmd.Parameters.AddWithValue("@enter", EnterDateTXT.Text) 

       conn.Open() 
       cmd.ExecuteNonQuery() 
       conn.Close() 
     End Sub 

回答

1

在你的頁面加載代碼,請檢查回來後

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 

If Not IsPostBack Then 
    ' Write your code to read data from database here 
End 

End Sub 

如果你不檢查回發在你的網頁加載事件,每次當你點擊提交按鈕,它將首先執行頁面加載中的代碼(再次將內容加載到文本框中)。因此,無論您在文本框中輸入什麼內容,都會被數據庫內容覆蓋,並且會再次保存到數據庫中。

爲了解決這個問題。在您的Page_load事件代碼中添加一個斷點,並在您的按鈕點擊事件代碼中添加另一個斷點。現在在文本框中輸入一些值,然後單擊該按鈕,查看頁面加載中的代碼塊是否正在執行。

檢查您的page_load中的回傳檢查將解決問題。

http://msdn.microsoft.com/en-us/library/system.web.ui.page.ispostback.aspx

+0

認爲,就提交正確的值解決了這個問題,但現在我沒有看到我的數據庫中的任何改變。因爲我在調試時沒有收到任何錯誤 – JDV590 2011-12-23 02:13:52

+0

在調用executeNonQuery之前放置一個斷點,並檢查變量「sql」的值是什麼,並在SQL服務器查詢分析器中執行它並執行該錯誤直。你到底在做什麼? – Shyju 2011-12-23 02:16:42

+0

當我將它輸入訪問查詢分析器時,它完美地使用了它,並且我能夠更新該值。我不知道爲什麼它不會通過我的prgram更新 – JDV590 2011-12-23 02:26:03