Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 错误sqlcommand.ExecuteOnQuery()_C#_Sql_Sql Server - Fatal编程技术网

C# 错误sqlcommand.ExecuteOnQuery()

C# 错误sqlcommand.ExecuteOnQuery(),c#,sql,sql-server,C#,Sql,Sql Server,我的sql server 2008数据库中有一个表 此表有2条记录,用户名=讲师 现在我想删除用户名为讲师的所有评论: 首先,我在SQL Server中测试查询: 从USERNAME='讲师'->正常工作的评论中删除:删除了2条记录 然后我在我的c代码中应用了该查询: public bool delete(string userdeleted) { string sql="DELETE FROM COMMENT WHERE USERNAME="+userdeleted; //userde

我的sql server 2008数据库中有一个表

此表有2条记录,用户名=讲师

现在我想删除用户名为讲师的所有评论:

首先,我在SQL Server中测试查询:

从USERNAME='讲师'->正常工作的评论中删除:删除了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:{无效的列名'讲师'。}行sqlcommand.ExecuteOnQuery

救命啊!!!为什么即使在SQL SERVER中运行良好,代码也无法运行?

我怀疑userdeleted的值只是讲师而不是讲师。因此,您的SQL语句是:

DELETE FROM COMMENT WHERE USERNAME=lecturer
这是最直接的问题——它正在寻找一个名为讲师的专栏。如果在SQLServerStudio中或之前测试的任何地方使用该SQL,则会出现相同的错误

但是,您不应该只添加引号-您应该使用参数化SQL:

string sql="DELETE FROM COMMENT WHERE USERNAME=@username";
...

sqlcommand.Parameters.Add("@username", SqlDbType.NVarChar).Value = userdeleted;
参数化SQL在许多方面都很重要:

它有助于预防 它使SQL更加清晰,不会导致大量的连接,并解决了这样的引用问题 它避免了转换问题,特别是对于日期/时间值 我怀疑userdeleted的值只是讲师而不是讲师。因此,您的SQL语句是:

DELETE FROM COMMENT WHERE USERNAME=lecturer
这是最直接的问题——它正在寻找一个名为讲师的专栏。如果在SQLServerStudio中或之前测试的任何地方使用该SQL,则会出现相同的错误

但是,您不应该只添加引号-您应该使用参数化SQL:

string sql="DELETE FROM COMMENT WHERE USERNAME=@username";
...

sqlcommand.Parameters.Add("@username", SqlDbType.NVarChar).Value = userdeleted;
参数化SQL在许多方面都很重要:

它有助于预防 它使SQL更加清晰,不会导致大量的连接,并解决了这样的引用问题 它避免了转换问题,特别是对于日期/时间值
哈哈,比我先到那里+我的朋友!哈哈,比我先到那里+我的朋友!考虑使用Sql连接和Sql命令对象。IE,使用var SQL连接= new…考虑使用一个Sql连接和Sql命令对象。ie,使用var sqlConnection=new。。。