簡體   English   中英

在 asp.net 查詢中處理 select 查詢中的 SqlCommand null 參數

[英]Handling SqlCommand null parameters in a select query in asp.net

我有這個示例代碼:

string query = "select * from xy where id == @id and name == @name";
SqlCommand cmd = new SqlCommand(query);
if(txtUsername.Text.Length > 0)
{
cmd.Parameters.Add["@name", SqlDbType.VarChar);
cmd.Parameters["@name"].Value = txtUsername.Text;
}

現在,如果 txtUsername <=0 我必須刪除刪除 AND 和名稱 == @name 的查詢字符串。 我怎樣才能達到這個結果?

提前致謝。

bool useName = !String.IsNullOrEmpty(txtUsername.Text);
StringBuilder query = new StringBuilder("select * from xy where id=@id");
if(useName) 
 query.Append(" AND name=@name");

SqlCommand cmd = new SqlCommand(query.ToString());
// add ID param
if(useName) {
  // add name param
}

您可以將查詢更改為

"SELECT * FROM xy WHERE id = @id and (@name = '' OR name = @name");

當參數沒有值時,可以避免弄亂您的查詢。

SqlCommand cmd = new SqlCommand();
if(txtUsername.Text != string.Empty)
{
cmd.CommandText = "select * from xy where id = @id and name = @name";
cmd.Parameters.Add["@name", SqlDbType.VarChar);
cmd.Parameters["@name"].Value = txtUsername.Text;
}
else
{
cmd.CommandText = "select * from xy where id = @id";
}

看看 stringtemplate.org。 ST 允許各種文本構造,並且非常靈活。

如果您的示例是唯一需要運行時構造的查詢,那么 ST 是多余的。 但我目前正在從事一個有很多疑問的項目,ST 讓我很高興。 您的所有查詢都存儲在一個文件中,而不是分散在許多 C# 類中,這一事實足以使過渡到 ST 是值得的。

暫無
暫無

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

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