簡體   English   中英

在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,string columnValue,string whereColumn,string whereValue,Config config){//存儲輸出查詢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("@columnValue", columnValue));
                cmd.Parameters.Add(new SqlParameter("@whereValue", whereValue));

                cmd.ExecuteNonQuery();
            }
        }
    }

您的查詢最終像是這樣:

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

這是完全合法的語法-將一個變量的值設置為另一個變量的值,其中@whereColumn的值(變量的實際值,而不是{table}中該colume的值)等於變量@whereValue

由於@whereColumn很可能不等於@whereValue ,因此不會發生任何變化。

這就是為什么將列名作為文本而不是參數添加到查詢中使它起作用的原因。 它將您的查詢更改為

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

確實引用表中的列,而不是參數值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM