错误sqlcommand.ExecuteNonQuery()

时间:2013-11-08 17:38:41

标签: c# sql sql-server

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

1 个答案:

答案 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在很多方面都很重要:

  • 有助于防止SQL injection attacks
  • 它使SQL更清晰(你最终没有加载连接,并修复这样的引用问题)
  • 避免转换问题,尤其是日期/时间值