感谢您的帮助。你们所有人(字面意思)
我检查了我的代码的另一部分,我正在更新一个条目,我使用了该代码并对其进行了修改。现在它可以工作
这是
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.SqlClient.SqlException'发生在System.Data.dll中 附加信息:' ='。
附近的语法不正确这是我的代码:
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();
}
答案 0 :(得分:4)
我会给你一个提示。
错误消息位于SQL代码中,在此行中:
string sql = "delete from [Login] where UserName = " + comboBox1.SelectedText.ToString();
问题是SQL需要单引号中的文本,例如'text'
...
没有提供答案(因为这是家庭作业)我认为这足以让你弄明白吗?
根据热门需求进行修改
顺便说一下,不建议仅从HTML输入(您的ComboBox)获取值的原因之一是它可能被恶意人员操纵并替换为SQL代码,这被称为SQL注射。
为避免这种情况,建议使用参数。
一个例子是
string sql = "delete from [Login] where UserName = @UserName"
然后你必须在执行命令之前为命令添加一个参数
command.Parameters.AddWithValue("@UserName", comboBox1.SelectedText.ToString());
这可以防止有人将您的SQL语句变为恶意的东西。
答案 1 :(得分:2)
更改
string sql = "delete from [Login] where UserName = " + comboBox1.SelectedText.ToString();
到这个
string sql = "delete from [Login] where UserName = '" + comboBox1.SelectedText.ToString() + "'";
你需要在文本周围单引号。
答案 2 :(得分:1)
试试这个:
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();
答案 3 :(得分:1)
string sql = "delete from [Login] where UserName = '" + comboBox1.SelectedText.ToString()+ "'";
更好,不是吗?
顺便注意Sql注入...
答案 4 :(得分:0)
为了防止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();
}
}