2009-12-06 43 views
0

我用下面的代碼保存哪些用戶編輯,代碼不給我任何錯誤代碼,但在同一時間,它沒有做任何事情,該數據仍然沒有任何新變化:保存在數據庫中沒有工作?! (VB.NET | OLE)

Dim a As String 
     a = comb3.Text & "/" & comb2.Text & "/" & comb1.Text 
     Dim SavInto As New OleDb.OleDbCommand 
     Dim ConStr As String = _ 
      "Provider=Microsoft.Jet.OLEDB.4.0; Data Source =" & _ 
      Application.StartupPath & "\base.mdb" 
     Dim Conn As New OleDbConnection(ConStr) 
     Conn.Open() 
     SavInto.Connection = Conn 
     SavInto.CommandType = CommandType.Text 
     SavInto.CommandText = "UPDATE tb SET Tasalsol = '" & _ 
     Trim(frm.tx1.Text) & _ 
      "' , anomber = '" & Trim(frm.TextBox2.Text) & _ 
     "' , nam= '" & Trim(frm.tx3.Text) & _ 
     "' , rotba= '" & Trim(frm.tx4.Text) & _ 
      "' , spesh= '" & Trim(frm.tx5.Text) & _ 
     "' , lastvstart= '" & a & _ 
      "' WHERE Notes ='" & Trim(frm.tx8.Text) & "'" 

     SavInto.ExecuteNonQuery() 
     Conn.Close() 

     With frm 
      .tx1.Text = Me.tx1.Text 
      .TextBox2.Text = Me.tx2.Text 
      .tx3.Text = Me.tx3.Text 
      .tx4.Text = Me.tx4.Text 
      .tx5.Text = Me.tx5.Text 
      .tx6.Text = a 
      .tx8.Text = Me.tx8.Text 

     End With 
     frm.Show() 
     Me.Close() 

我寫的整個代碼,究竟什麼是錯誤的正是?!並且謝謝

注意:有一些列的單元格中可能有許多相同的數據。

+3

SQL注入攻擊是右邊的門後面。不要連接字符串值來創建查詢。改用參數。 – 2009-12-06 20:09:23

+0

當您直接在數據庫中運行SQL時,您的SQL是否正常工作?如果您進入代碼並在CommandText設置後立即停止,您可以看到正在發送的SQL。將其複製並在數據庫中運行並驗證它是否正常工作。 – DOK 2009-12-06 20:11:10

+0

我強烈懷疑'WHERE'子句的值爲false,因此,沒有行被更新。 – 2009-12-06 20:12:26

回答

6

除了Mehrdad的非常的關於使用參數化查詢的明智建議,您的WHERE子句看起來很奇怪。您確定要使用「筆記」字段來確定要更新哪一行嗎?並且是tx8的可編輯字段?你爲什麼要修剪它?看起來不太可能,找到要更新的行的最佳方式是通過稱爲「筆記」的字段,其看起來是可能需要修剪的純文本。

這將是更好地使用該行(或列)的ID有問題來更新它。

請注意,你不看的ExecuteNonQuery的返回值 - 我懷疑它的返回0,以表明它沒有更新任何行。你應該檢查一下。

而且你應該使用Using聲明同時爲連接和命令,讓他們將被適當配置甚至拋出一個異常。

只是爲了重申:使用參數化查詢,而不是在SQL中嵌入值。像這樣的查詢讓數據庫管理員哭了起來。

+0

謝謝mr.Jon,其實我覺得你的回答非常有用,但是我真的崩潰了,因爲代碼中有太多的錯誤,所以你可以給我一些關於如何編輯它的例子嗎? – 2009-12-06 21:15:01

+1

@ Eias.N:恐怕我沒有任何事例可做 - 但我懷疑你可以搜索一些。我建議你一次專注於一個方面。 – 2009-12-06 21:37:17