2015-06-01 17 views
0

我在我的vb項目上有一個保存命令。問題是它不會用「'」或圓括號保存文本。我認爲這是與SQL命令。這裏是我的儲蓄以及更新將括號或引號保存到vb.net的sql中

節省

Dim myAdapter As New MySqlDataAdapter 
      Dim myDatatable As New DataTable 
      Dim command As New MySqlCommand 
      Dim add As String 

      add = "INSERT INTO tracker.recordtracker (Action_Taken,Marginal_Note,Remarks,Type_of_Document,Referred_Date,Items,Received_From,Received_Date,Referred_To,recdate,refdate)values('" + acttaken.Text + "','" + margnote.Text + "','" + remarks.Text + "','" + doctype.Text + "','" + rfrldatelbl.Text + "','" + itemtbx.Text + "','" + rfromtbx.Text + "','" + rcvdate.Text + "','" + reftotbx.Text + "' ,'" + rdate.Text + "',@refdate)" 
      command = New MySqlCommand(add, connection) 
      refdate.CustomFormat = "yyyy-MM-dd" 


      myAdapter.SelectCommand = command 
      myAdapter.Fill(myDatatable) 
      MsgBox("Data has been successfully added.") 
      clearfield() 
      loaddatabase() 

      connection.Close() 
      connection.Dispose() 
     Catch ex As Exception 
      MsgBox(ex.Message) 
     End Try 

的更新代碼

Try 
       connection.Open() 
       rcvdate.Text = rdate.Text 
       If refdate.Checked = False Then 
        rfrldatelbl.Text = "____-__-__" 
       Else 
        refdate.CustomFormat = "yyyy-MM-dd" 
        rfrldatelbl.Text = refdate.Text + " " + TimeOfDay 
       End If 

       Dim query As String 
       query = "update tracker.recordtracker set Action_Taken='" & acttaken.Text & "', Marginal_Note='" & margnote.Text & "', Remarks='" & remarks.Text & "',Type_of_Document='" & doctype.Text & "', Items = '" & itemtbx.Text & "', Referred_To='" & reftotbx.Text & "', Referred_Date='" & rfrldatelbl.Text & "',recdate='" & rdate.Text & "',refdate='" & refdate.Text & "' where id = '" & ID.Text & "'" 

       utos = New MySqlCommand(query, connection) 
       reader = utos.ExecuteReader 

       MsgBox("Data has been changed.") 
       connection.Close() 
       loaddatabase() 

       connection.Close() 
       connection.Dispose() 
      Catch ex As Exception 
       MsgBox(ex.Message) 
      End Try 
+0

。說的是真的 - 請考慮使用參數化查詢。如果你只是手動轉義引號,你將面臨很大的SQL注入風險... –

+0

雖然什麼@JeremyC SQL字符串使用引號 –

+0

非常真實,我應該在我的評論中加入@MattFellows,mrkdenz讓我們來說說ID.text中的某人:1''; DROP TABLE tracker.recordtracker;它可能會導致你的表被刪除後更新 –

回答

3

你附加到一個形成SQL查詢的字符串。你需要閱讀SQL injection,看看爲什麼這是一個可怕的想法。但基本上,它將允許任何有權訪問的人提交您追加到您的字符串的值,控制您的數據庫。你可能會想要做這樣的事情:

Dim sql As String = "INSERT INTO foo (baz) VALUES (@Baz)" 

Using cn As New SqlConnection("Your connection string here"), _ 
    cmd As New SqlCommand(sql, cn) 

    cmd.Parameters.Add("@Baz", SqlDbType.VarChar, 50).Value = Baz 
    cmd.ExecuteNonQuery() 

以解決您的問題。

+0

工作在我的插入,但有一個致命的錯誤在我的UPDATE – mrkdenz

+0

working..i把讀者放在錯誤的空間..clumsy我.. – mrkdenz

0

MySQL reference

字符串是字節或字符序列,無論是 單引號(「'」)內封閉的或雙引號(「「」)

所以'是保留字符
如果要在字符串內容中使用它,則需要使用轉義序列\'

但是正如@Matt Fellows在他的回答中提到的,在數據​​庫中保存字符串值的更好做法是:SqlParameters
使用SqlParameter您不需要使用轉義序列,字符串將被保存,就像它一樣(基於列)

Dim param As New SqlParameter With {.ParameterName="@text", 
            .SqlDbType = SqlDbType.VarChar, 
            .Value = "Your 'Name' in quotes"} 
如果你想在你需要做的「」或「」(雙單引號或雙雙引號,以顯示「和」分別爲