处理asp.net中select查询中的SqlCommand空参数

本文关键字:SqlCommand 参数 select asp net 处理 查询 | 更新日期: 2023-09-27 18:01:16

我有这个示例代码:

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。我怎样才能达到这个结果呢?

处理asp.net中select查询中的SqlCommand空参数

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值得。