gpt4 book ai didi

c# - 错误sqlcommand.ExecuteNonQuery()

转载 作者:太空宇宙 更新时间:2023-11-03 17:52:39 25 4
gpt4 key购买 nike

我的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中也能正常工作???

最佳答案

我怀疑 的值只是 userdeleted而不是 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在许多方面都很重要:


它有助于防止 SQL injection attacks
它可以使SQL更加清晰(最终不会带来大量的串联,并且可以解决类似这样的引用问题)
它避免了转换问题,尤其是对于日期/时间值

关于c# - 错误sqlcommand.ExecuteNonQuery(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19865246/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com