簡體   English   中英

刪除SQL行並更改ID

[英]Delete SQL row and change Id

我正在制作一個連接到SQL數據庫的C#工具,以管理我創建的另一個程序的用戶。 我在ListBox顯示用戶,並且可以添加/刪除用戶。 刪除一些概要文件后,事情變得很奇怪,我認為這可能與我從數據庫中刪除行有關。 我使用的ID在每次創建新用戶時都會自動增加。 這是我從數據庫中刪除的代碼:

using (conn = new SqlConnection(connectionString))
using (SqlCommand command = new SqlCommand("DELETE FROM myDatabase WHERE Id = '" + (listBox1.SelectedIndex + 1) + "'", conn))
{
    conn.Open();
    command.ExecuteNonQuery();
}

這就是我將用戶加載到列表框中的方式:

using (conn = new SqlConnection(connectionString))
using (SqlDataAdapter sqlAdapt = new SqlDataAdapter("SELECT * FROM myDatabase", conn))
{
    DataTable dataTable = new DataTable();
    sqlAdapt.Fill(dataTable);
    listBox1.DisplayMember = "Name";
    listBox1.ValueMember = "Id";
    listBox1.DataSource = dataTable;
}

如何從數據庫中刪除正確的行?

您應該使用屬性SelectedValue查找您的ID,而不是SelectedIndex

if(listBox1.SelectedValue != null)
{
    int userID = Convert.ToInt32(listBox1.SelectedValue);
    using (conn = new SqlConnection(connectionString))
    using (SqlCommand command = new SqlCommand("DELETE FROM myDatabase WHERE Id = @uid", conn))
    {

        conn.Open();
        command.Parameters.Add("@uid", MySqlDbType.Int32).Value = userID;
        command.ExecuteNonQuery();
    }
}

SelectedIndex的問題在於此值從0到列表框中的最大項目數。 此值與數據庫自動計算出的用戶標識無關。 (僅一次刪除和一次添加后,這些值不同步)

還要注意,永遠不要使用字符串連接構建sql文本。 這是一個眾所周知的安全問題,稱為Sql Injection

"DELETE FROM myDatabase WHERE Id = '" + (listBox1.SelectedIndex + 1) + "'"

我不確定mySQL,但看起來您傳遞的是字符串而不是int。 當您將參數作為數字傳遞時,應刪除“”。 因此,它將看起來像:

"DELETE FROM myDatabase WHERE Id = " + (listBox1.SelectedValue)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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