簡體   English   中英

MySQL數據不從表VB.NET中刪除

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM