C#中的更新查询执行,但不执行';SQL中的t更新

C#中的更新查询执行,但不执行';SQL中的t更新,c#,sql-server,ado.net,C#,Sql Server,Ado.net,传递的参数是好的。我甚至在SQL中运行了查询以查看是否关闭,但它更新了数据库。但当我在调试时运行程序时,它将运行查询,但不会更新数据库 public void UpdateRowValueQuery<T>(T table, string columnName, string columnValue, string whereColumn, string whereValue, Config con

传递的参数是好的。我甚至在SQL中运行了查询以查看是否关闭,但它更新了数据库。但当我在调试时运行程序时,它将运行查询,但不会更新数据库

    public void UpdateRowValueQuery<T>(T table, string columnName,
                    string columnValue, string whereColumn, string whereValue,
                    Config config)
    {
        // Store the output query
        StringBuilder query = new StringBuilder();

        // Insert query that adds the database name
        // and table name passed through
        query.Append("UPDATE ");
        query.Append(config.DatabaseName);
        query.Append(".dbo.");
        query.Append(typeof(T).Name);
        query.Append(" SET ");
        query.Append("@columnName");
        query.Append(" = ");
        query.Append("@columnValue");
        query.Append(" WHERE ");
        query.Append("@whereColumn");
        query.Append(" = ");
        query.Append("@whereValue");

        // Execute the update
        using (SqlConnection conn = DBConnection.GetSqlConnection())
        {
            using (SqlCommand cmd = new SqlCommand(query.ToString(), conn))
            {
                cmd.Parameters.Add(new SqlParameter("@columnName", columnName));
                cmd.Parameters.Add(new SqlParameter("@columnValue", columnValue));
                cmd.Parameters.Add(new SqlParameter("@whereColumn", whereColumn));
                cmd.Parameters.Add(new SqlParameter("@whereValue", whereValue));

                cmd.ExecuteNonQuery();
            }
        }
    }
public void UpdateRowValueQuery(T表,字符串列名,
字符串columnValue、字符串whereColumn、字符串whereValue、,
配置(配置)
{
//存储输出查询
StringBuilder查询=新建StringBuilder();
//插入添加数据库名称的查询
//和传递的表名
查询。追加(“更新”);
Append(config.DatabaseName);
追加(“.dbo”);
query.Append(typeof(T).Name);
查询。追加(“集合”);
query.Append(“@columnName”);
查询。追加(“=”);
query.Append(“@columnValue”);
查询。追加(“WHERE”);
query.Append(“@whereColumn”);
查询。追加(“=”);
query.Append(“@whereValue”);
//执行更新
使用(SqlConnection conn=DBConnection.GetSqlConnection())
{
使用(SqlCommand cmd=newsqlcommand(query.ToString(),conn))
{
cmd.Parameters.Add(新的SqlParameter(“@columnName”,columnName));
cmd.Parameters.Add(新的SqlParameter(“@columnValue”,columnValue));
cmd.Parameters.Add(新的SqlParameter(“@whereColumn”,whereColumn));
cmd.Parameters.Add(新的SqlParameter(“@whereValue”,whereValue));
cmd.ExecuteNonQuery();
}
}
}

从参数中删除列名是允许查询工作的原因。有趣的是,它不会通知您任何错误和运行,尽管实际上不起作用。谢谢大家的帮助

public void UpdateRowValueQuery(T表,字符串列名, 字符串columnValue、字符串whereColumn、字符串whereValue、, 配置(配置) { //存储输出查询 StringBuilder查询=新建StringBuilder()


从参数中删除列名是允许查询工作的原因。有趣的是,它不会通知您任何错误和运行,尽管实际上不工作。谢谢大家的帮助

public void UpdateRowValueQuery(T表,字符串列名, 字符串columnValue、字符串whereColumn、字符串whereValue、, 配置(配置) { //存储输出查询 StringBuilder查询=新建StringBuilder()


您的查询结果类似于:

UPDATE {table} 
SET @columnName = @columnValue
WHERE @whereColumn = @whereValue
这是完全合法的语法-它将一个变量的值设置为另一个变量的值,其中
@whereColumn
的值(变量的实际值,而不是
{table}
中该列的值等于变量
@whereValue

由于
@whereColumn
很可能不等于
@whereValue
,因此没有任何变化

这就是为什么将列名作为文本而不是参数添加到查询中可以使其工作的原因

UPDATE {table} 
SET {columnName} = @columnValue
WHERE {whereColumn} = @whereValue

它引用的是表中的列,而不是参数值。

您的查询结果类似于:

UPDATE {table} 
SET @columnName = @columnValue
WHERE @whereColumn = @whereValue
这是完全合法的语法-它将一个变量的值设置为另一个变量的值,其中
@whereColumn
的值(变量的实际值,而不是
{table}
中该列的值等于变量
@whereValue

由于
@whereColumn
很可能不等于
@whereValue
,因此没有任何变化

这就是为什么将列名作为文本而不是参数添加到查询中可以使其工作的原因

UPDATE {table} 
SET {columnName} = @columnValue
WHERE {whereColumn} = @whereValue

它引用的是表中的列,而不是参数值。

请显示您的连接字符串。最可能的原因是您没有更新您认为正在更新的数据库。这与您不能使用参数表示列名(也不是datatable)相同我没有看到conn.open?请显示您的连接字符串。最可能的原因是您没有更新您认为正在更新的数据库。正如您不能使用参数来表示列名(既不是数据表)一样,我没有看到conn.open?