传递的参数很好。我甚至在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();
}
}
}
答案 0 :(得分:0)
从参数中删除列名是允许查询起作用的原因。有趣的是它不会告诉你任何错误和运行,但实际上并没有工作。谢谢大家的帮助。
public void UpdateRowValueQuery(T table,string columnName, string columnValue,string whereColumn,string whereValue, 配置配置) { //存储输出查询 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();
}
}
}
答案 1 :(得分:0)
您的查询最终会是:
UPDATE {table}
SET @columnName = @columnValue
WHERE @whereColumn = @whereValue
这是完全合法的语法 - 它将一个变量的值设置为另一个变量的值,其中@whereColumn
的值(变量的实际值,而不是值的值) {table}
中的colume等于变量@whereValue
的值。
由于@whereColumn
很可能不等于@whereValue
,因此没有任何变化。
这就是为什么将列名作为文本而不是参数添加到查询中的原因。它将您的查询更改为
UPDATE {table}
SET {columnName} = @columnValue
WHERE {whereColumn} = @whereValue
引用表中的列,而不是参数值。