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