繁体   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