Обработка пустых параметров SqlCommand в запросе выбора в asp.net - PullRequest
0 голосов
/ 05 июля 2011

У меня есть этот пример кода:

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 и имя == @название. Как мне достичь этого результата? </p>

Заранее спасибо.

Ответы [ 4 ]

2 голосов
/ 05 июля 2011
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 голос
/ 05 июля 2011
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";
}
1 голос
/ 05 июля 2011

Вы можете изменить свой запрос на

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

Сохраняет беспорядок в вашем запросе, когда параметр не имеет значения.

0 голосов
/ 05 июля 2011

Взгляните на stringtemplate.org.ST допускает все виды текстового конструирования и является очень гибким.

Если ваш пример - единственный запрос, требующий построения во время выполнения, тогда ST является избыточным.Но сейчас я работаю над проектом с большим количеством запросов, и ST порадовал меня.Тот факт, что все ваши запросы хранятся в одном файле и не распределены по многим классам C #, достаточен для перехода на ST.

...