[英]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.