我在很长一段时间内都没有使用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
可能无法进入查询。有没有更好的方法来实现这一目标?我知道这是一个非常主观的问题,但我觉得我无法正确或有效地做到这一点。
答案 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);
}