我有这个示例代码:
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和名称== @名称。 我怎样才能达到这个结果?
提前致谢。
答案 0 :(得分:2)
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
}
答案 1 :(得分:1)
您可以将查询更改为
"SELECT * FROM xy WHERE id = @id and (@name = '' OR name = @name");
当参数没有值时,可以减少查询的混乱。
答案 2 :(得分:1)
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";
}
答案 3 :(得分:-1)
看看stringtemplate.org。 ST允许各种文本构造,并且非常灵活。
如果您的示例是唯一需要运行时构造的查询,那么ST是过度的。 但我目前正在开展一个有很多疑问的项目,ST让我很高兴。所有查询都存储在一个文件中而不是分散在许多C#类中的事实足以使ST过渡到值得。