[英]MySQL Data NOT Deleting from table VB.NET
為什么這不會刪除MySQL數據庫中的數據!?
Private Sub Button4_Click(sender As System.Object, e As System.EventArgs) Handles Button4.Click
Dim dbCon As MySqlConnection
Dim strQuery As String = ""
Dim SQLCmd As MySqlCommand
Dim DR As MySqlDataReader
Try
dbCon = New MySqlConnection("Server=Localhost;Database=myusers;Uid=root;Pwd=Mypassword")
strQuery = "DELETE settings FROM settings WHERE user=" & Me.loginuser.Text
'* FROM settings WHERE user = "Testuser"'
SQLCmd = New MySqlCommand(strQuery, dbCon)
' OPEN THE DB AND KICKOFF THE QUERY
dbCon.Open()
DR = SQLCmd.ExecuteReader
While DR.Read
req1.Text = "" And exlink.Text = ""
End While
' DONE! Close DB
DR.Close()
dbCon.Close()
Catch ex As Exception
TextBox8.Text = ("Fail" & vbCrLf & vbCrLf & ex.Message)
End Try
這是我的數據庫的圖片:
或者,我可以以某種方式使它替換數據庫中已有的,在這種情況下,請幫助我。
我將嘗試以這種方式更改您的代碼
Using con = New MySqlConnection("Server=.....")
con.Open()
Dim sqlText = "DELETE * FROM settings WHERE user = @ulogin"
Using cmd = new MySqlCommand(sqlText, con)
cmd.Parameters.AddWithValue("@ulogin", Me.loginuser.Text)
cmd.ExecuteNonQuery()
End Using
End Using
首先,不要使用字符串連接來創建命令文本以傳遞給數據庫引擎。 這樣就冒了Sql注入的風險,如果用戶名包含單引號(即O'Hara),您的代碼將失敗並出現語法錯誤(日期格式化,解析數字小數和其他全球化問題會出現同樣的問題)。 相反,像上面代碼中的參數化查詢將避免所有這些問題。
在參數化查詢中,查詢文本不包含搜索條件或更新或插入數據的實際值。 相反,它包含占位符(在我們的例子中,它被稱為@ulogin)。 使用添加到MySqlCommand
的Parameters集合中的一個或多個MySqlParameter
指定要在占位符位置插入的正確值。 在這種情況下,我使用了AddWithValue方法,該方法直接從值的數據類型派生正確的數據類型。 因為Me.loginuser.Text
是一個字符串值,所以該參數將被視為一個字符串值,替換不正確的單引號並刪除通常用於掛載Sql注入攻擊的extraneus字符。 引擎將在執行時在占位符處插入正確的值
編輯:看到你對使用的MySql連接器的評論,我將嘗試更新我的答案,以顯示NET 1的半等效版本。
Try
Dim con As MySqlConnection = New MySqlConnection("Server=.....")
con.Open()
Dim sqlText as String = "DELETE * FROM settings WHERE user = @ulogin"
Dim cmd As MySqlCommand = new MySqlCommand(sqlText, con)
Dim par As MySqlParameter = New MySqlParameter("@ulogin", MySqlDbType.VarChar)
par.Value = Me.loginuser.Text
cmd.Parameters.Add(par)
cmd.ExecuteNonQuery()
Finally
con.Close()
End Try
我不確定連接器1.0.10是否支持帶有@
前綴的參數名稱或僅支持:
前綴
嘗試
strQuery = "DELETE FROM settings " _
& " WHERE user = '" & Me.loginuser.Text & "'"
但正如前面所述,您應該使用參數化查詢。 如果您有一個名為O'Brien的用戶,那么您的查詢(如上所述)將因嵌入的單引號而失敗。 使用DELETE時,您將刪除整個記錄,並且已在FROM子句中指定了表名。
我不認為你可以在mysql中使用雙引號,我認為它只是單引號。 嘗試
Query = "DELETE * FROM settings WHERE user = '" & Me.loginuser.Text & "'"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.