這是我從 ui 接收道具的代碼,它是我收到的布林值。從用戶界面,我傳遞真偽:
public void AlterTableColumn(int instanceid, bool IsHidden)
{
var sqlQuery2 = String.Format("Update {0} set {1} = 1 where Id = {2};", "Mytable", "IsHidden", instanceid);
string connString = System.Configuration.ConfigurationManager.AppSettings["DBConnection"].ToString();
// getConnectionStringById(instanceId.ToString());
using (SqlConnection connection = new SqlConnection(connString))
{
connection.Open();
SqlCommand sql_cmnd = new SqlCommand(sqlQuery2, connection);
sql_cmnd.CommandType = CommandType.Text;
sql_cmnd.CommandTimeout = 10000;
sql_cmnd.ExecuteNonQuery();
sql_cmnd.Connection.Close();
}
}
我如何改變sqlQuery2上面提到的真偽?現在它在 SQL 表中將 1 設為 true 或 false
uj5u.com熱心網友回復:
按照現在的寫法, 的值sqlQuery2將是:
Update Mytable set IsHidden = 1 where Id = /*the value of the passed in instanceId*/
您永遠不會使用傳入的bool, IsHidden。無論您傳遞什么函式引數,您總是將IsHidden列設定為 。1IsHidden
為了將資料庫更新為1或0基于IsHidden引數,您需要int根據該引數的值設定一個。您還需要更新查詢本身以使用int而不是總是將值設定為1.
int isHiddenDbValue = IsHidden ? 1 : 0;
var sqlQuery2 = string.Format("Update {0} set IsHidden = {1} where Id = {2}",
"Mytable", isHiddenDbValue, instanceId);
話雖string.Format如此,您應該使用引數化查詢,而不是像您正在做的那樣直接使用并將值放入查詢中。這將保護您免受 SQL 注入攻擊。
例如:
public void AlterTableColumn(int instanceid, bool IsHidden)
{
int isHiddenDbValue = IsHidden ? 1 : 0;
var sqlQuery2 = "Update Mytable set IsHidden = @IsHidden where Id = @Id";
string connString = System.Configuration.ConfigurationManager.AppSettings["DBConnection"].ToString();
using (SqlConnection connection = new SqlConnection(connString))
{
connection.Open();
SqlCommand sql_cmnd = new SqlCommand(sqlQuery2, connection);
sql_cmnd.CommandType = CommandType.Text;
sql_cmnd.CommandTimeout = 10000;
sql_cmnd.Parameters.AddWithValue("IsHidden", isHiddenDbValue);
sql_cmnd.Parameters.AddWithValue("Id", instanceId);
sql_cmnd.ExecuteNonQuery();
sql_cmnd.Connection.Close();
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/424199.html
上一篇:保留關系的模型構建器種子資料
