如何在添加值时确定是否存在某个参数?

时间:2015-02-19 16:24:48

标签: c# sql asp.net .net

我在很长一段时间内都没有使用SQL,但是一个新项目要求我弄清楚它。我在我的页面上的几个文本框中构建一个SELECT语句,并开始编写代码,以便在我发现不是每个参数都可能被使用时添加参数值。

例如:

    string parameterizedQuery = " SELECT * FROM dbo.Account WHERE ";
    if (!string.IsNullOrEmpty(txtAccountNumber.Text.Trim()))
        parameterizedQuery += " AccountNumber = @AccountNumber";

    //5 more instances of similar query building for other fields

    SqlCommand cmd = new SqlCommand(parameterizedQuery, sqlconn);
    cmd.Parameters.AddWithValue("@AccountNumber", txtAccountNumber.Text.Trim());

但如果用户没有使用该字段进行搜索,则@AccountNumber可能无法进入查询。有没有更好的方法来实现这一目标?我知道这是一个非常主观的问题,但我觉得我无法正确或有效地做到这一点。

3 个答案:

答案 0 :(得分:1)

您可以立即创建一个空的命令对象,并根据需要用params填充它:

SqlCommand cmd = new SqlCommand();
cmd.Connection = sqlconn;
command.CommandType = CommandType.Text;

string parameterizedQuery = " SELECT * FROM dbo.Account WHERE ";
if (!string.IsNullOrEmpty(txtAccountNumber.Text.Trim()))
{
    parameterizedQuery += " AccountNumber = @AccountNumber";
    cmd.Parameters.AddWithValue("@AccountNumber", txtAccountNumber.Text.Trim());
}
...
cmd.CommandText = parameterizedQuery;

答案 1 :(得分:1)

我这样做:

string sql = " SELECT * FROM dbo.Account WHERE 1=1";
var pars = new List<SqlParameter>();

if (!string.IsNullOrWhiteSpace(txtAccountNumber.Text))
{
    parameterizedQuery += " AND AccountNumber = @AccountNumber";
    var par = new SqlParameter("@AccountNumber", SqlDbType.NVarChar, 10);
    par.Value = txtAccountNumber.Text;
    pars.Add(par);
}

//5 more instances of similar query building for other fields

SqlCommand cmd = new SqlCommand(sql, sqlconn);
if (pars.Length > 0) cmd.Parameters.AddRange(pars.ToArray());

答案 2 :(得分:0)

if (cmd.Parameters.Contains("@parameters"))
{
    cmd.Parameters.AddWithValue("@parameters", Parameters);
}