删除字符串组合框项目C#
本文关键字:项目 组合 字符串 删除 | 更新日期: 2023-09-27 18:04:36
感谢您的帮助。你们所有人(字面上(
我检查了我的代码的另一部分,在那里我更新了一个条目,我使用了那个代码并修改了它
在这里
string sql = "DELETE from Login WHERE UserName = '" + comboBox1.SelectedItem.ToString() + "'";
SqlCommand cmd = conn.CreateCommand();
cmd.CommandType = CommandType.Text;
cmd.CommandText = sql;
cmd.Parameters.Add(new SqlParameter("@UserName", comboBox1.SelectedItem.ToString()));
int rowdel = cmd.ExecuteNonQuery();
MessageBox.Show("Done!");
这是我通过组合框从数据库中删除特定行的代码。我的老师使用了同样的代码,他的程序也成功了。然而,它在上显示了一个错误
"int rowInserted=cmd.ExecuteNonQuery((;">
上面写着
System.Data.dll中发生类型为"System.Data.SqlClient.SqlException"的未处理异常其他信息:"="附近的语法不正确
这是我的代码:
private void button1_Click(object sender, EventArgs e)
{
string connectionString = "Server = HP-PC''SQLExpress; Database = CProject; Trusted_Connection = True";
SqlConnection conn = new SqlConnection();
conn.ConnectionString = connectionString;
conn.Open();
string sql = "delete from [Login] where UserName = " + comboBox1.SelectedText.ToString();
SqlCommand cmd = conn.CreateCommand();
cmd.CommandType = CommandType.Text;
cmd.CommandText = sql;
int rowInserted = cmd.ExecuteNonQuery();
label7.Text = rowInserted.ToString();
conn.Close();
}
private void AddDeleteUsers_Load(object sender, EventArgs e)
{
string connectionstring = "Server=HP-PC''SQLExpress;Database=CProject;Trusted_Connection=True;";
SqlConnection conn = new SqlConnection();
conn.ConnectionString = connectionstring;
conn.Open();
SqlCommand cmd = conn.CreateCommand();
cmd.CommandType = CommandType.Text;
cmd.CommandText = "select UserName from Login";
SqlDataReader reader = cmd.ExecuteReader();
while (reader.Read())
comboBox1.Items.Add(reader["UserName"].ToString());
reader.Close();
conn.Close();
}
我会给你一个提示。
错误消息在您的SQL代码中,如下所示:
string sql = "delete from [Login] where UserName = " + comboBox1.SelectedText.ToString();
问题是SQL需要单引号中的文本,例如'text'
。。。
在没有提供答案的情况下(因为这是家庭作业(,我认为这足以让你弄清楚吗?
编辑"按流行需求">
顺便说一句,不建议只从HTML输入(您的组合框(中获取值的原因之一是,它可能会被恶意人员操纵并替换为SQL代码,即SQL注入。
为了避免这种情况,建议使用参数。
就是一个例子
string sql = "delete from [Login] where UserName = @UserName"
然后,在执行之前,您必须在命令中添加一个参数
command.Parameters.AddWithValue("@UserName", comboBox1.SelectedText.ToString());
这可以防止有人将您的SQL语句更改为某种阴险的东西。
更改
string sql = "delete from [Login] where UserName = " + comboBox1.SelectedText.ToString();
到这个
string sql = "delete from [Login] where UserName = '" + comboBox1.SelectedText.ToString() + "'";
你需要在文本周围加上单引号。
试试这个:
string sql = "delete from [Login] where UserName = '" + comboBox1.SelectedText.ToString() + "'";
最好使用SqlParameter
来避免sql注入。
string sql = "delete from [Login] where UserName = @username";
SqlCommand cmd = conn.CreateCommand();
cmd.CommandType = CommandType.Text;
cmd.CommandText = sql;
cmd.Parameters.AddWithValue("@username", comboBox1.SelectedText.ToString());
int rowInserted = cmd.ExecuteNonQuery();
string sql = "delete from [Login] where UserName = '" + comboBox1.SelectedText.ToString()+ "'";
更好,不是吗?
顺便说一句,小心Sql注入。。。
为了防止SQL注入攻击,您应该使用参数化查询:
string connectionString = "Server = HP-PC''SQLExpress; Database = CProject; Trusted_Connection = True";
using (SqlConnection conn = new SqlConnection(connectionString))
{
conn.Open();
string sql = "delete from [Login] where UserName = @UserName;";
using (SqlCommand cmd = new SqlCommand(sql, conn))
{
SqlParameter p = new SqlParameter("UserName", comboBox1.SelectedText.ToString());
cmd.Parameters.Add(p);
cmd.ExecuteNonQuery();
}
}