C# 中的更新查询已执行,但未在 SQL 中更新

Update query in C# executes, but doesn't update in SQL

传递的参数很好。我什至 运行 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 table, string columnName, 字符串 columnValue,字符串 whereColumn,字符串 whereValue, 配置配置) { // 存储输出查询 StringBuilder 查询 = 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("@columnValue", columnValue));
                cmd.Parameters.Add(new SqlParameter("@whereValue", whereValue));

                cmd.ExecuteNonQuery();
            }
        }
    }

您的查询结果类似于:

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

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

的值

因为 @whereColumn 很可能不等于 @whereValue,所以没有任何变化。

这就是为什么将列名作为文本而不是参数添加到查询中使其起作用的原因。它将您的查询更改为

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

引用了 table 中的列,而不是参数值。