我的sql server 2008
数据库
COMMENT(idcom,content,username);
此表有2条username
= lecturer
现在我要删除所有有用户名=讲师的评论:
首先,我在SQL Server中测试查询:
DELETE FROM COMMENT WHERE USERNAME='lecturer'
- >它工作正常:删除了2条记录。
然后我在我的c#代码中应用了该查询:
public bool delete(string userdeleted)
{
string sql="DELETE FROM COMMENT WHERE USERNAME="+userdeleted; //userdeleted= lecturer
try
{
SqlConnection sqlconnection = new SqlConnection();
SqlCommand sqlcommand = new SqlCommand();
sqlconnection.ConnectionString = connstring;
sqlconnection.Open();
sqlcommand.Connection = sqlconnection;
sqlcommand.CommandType = CommandType.Text;
sqlcommand.CommandText = sql;
sqlcommand.ExecuteNonQuery();
sqlconnection.Close();
sqlcommand.Dispose();
return true;
}
catch (Exception)
{
return false;
}
}
}
当我构建该代码时,程序跳转到catch
语句并返回false ???。
尝试调试,它在第$exception:{"Invalid column name 'lecturer'."}
行有一个错误:sqlcommand.ExecuteNonQuery();
。
帮助!!!为什么代码无法工作,即使它在SQL SERVER中工作正常???
答案 0 :(得分:9)
我怀疑userdeleted
的价值仅为lecturer
而不是'lecturer'
。因此,您的SQL语句是:
DELETE FROM COMMENT WHERE USERNAME=lecturer
这是当前的问题 - 它正在寻找名为lecturer
的专栏。如果您在SQL Server Studio中使用该SQL(或之前测试的任何地方),您将收到相同的错误。
但是,你不应该只是添加引号 - 你应该使用参数化的SQL:
string sql="DELETE FROM COMMENT WHERE USERNAME=@username";
...
sqlcommand.Parameters.Add("@username", SqlDbType.NVarChar).Value = userdeleted;
参数化SQL在很多方面都很重要: