Задать условие для текстбокса C#
Всем привет, у меня есть простая форма для ввода данных(состоящая из двух текстбоксов), если я заполню один любой текстбокс и нажму ок, то все нормально, если же я заполню оба текстбокса и нажму ок, то выходит ошибка Incorrect syntax near 'KDK'. Я понимаю что он не может выполнить оба условия, что сделать надо? Я пробовал написать " and KDK.N_KDK = @n_kdk " в таком случае у меня работают оба условия, но если я ввожу только условие по сотруднику (без цеха), то выходит такая же ошибка.
public override SqlCmdText GetSqlFilter()
{
string n_kdk = "";
if (Cursor.Properties.Contains("N_KDK_"))
{
n_kdk = Cursor.Properties.Get<string>("N_KDK_");
}
int ceh = 0;
if (Cursor.Properties.Contains("CEH_O"))
{
ceh = Cursor.Properties.Get<int>("CEH_O");
}
var Cond = ITnet2.Server.Dialogs.InputForm.Activate("_DMZ",
new Dictionary<string, object> { { "N_KDK_", n_kdk }, { "CEH_O", ceh } }); // подключение формы
if (Cond.Success)
{
string Conditions = " ";
n_kdk = Cond.InputFormValues.GetValue<string>("N_KDK_");
Cursor.Properties.Set("N_KDK_", n_kdk); // запись значений данных в свойство
ceh = Cond.InputFormValues.GetValue<int>("CEH_O");
Cursor.Properties.Set("CEH_O", ceh); // запись значений данных в свойство
// условие по цеху
if (ceh != 0)
{
Conditions += " KDK.CEH = @ceh ";
}
// условие по сотруднику
if (n_kdk != null && n_kdk.Length > 0)
{
Conditions += " KDK.N_KDK = @n_kdk "; // ТУТ ОШИБКА!
}
return new SqlCmdText(string.Format(Conditions),
new SqlParam("n_kdk", n_kdk.ToString()),
new SqlParam("ceh", ceh.ToString()));
}
else
return null;
}
Ответы (1 шт):
При чём тут текстбокс? К чему весь этот код?
Давайте я перефразирую ваш вопрос.
Есть два значения, получаемые откуда-то. Если они не пустые, то следует добавить их в результат. Причём, если присутствуют оба, между ними следует вставить and. Так?
string n_kdk = ...; // тут получение значеня
int ceh = ...; // тут получение значения
var conditions = new List<string>();
if (ceh != 0)
{
conditions.Add(" KDK.CEH = @ceh ");
}
if (!string.IsNullOrWhiteSpace(n_kdk))
{
conditions.Add(" KDK.N_KDK = @n_kdk ");
}
string filter = string.Join(" and ", conditions);
Вот так легко и просто формируется итоговое выражение.
Но вам ещё нужно сами значения добавить в виде параметров. Чтобы дать конкретный ответ, как именно это сделать, нужно знать устройство ваших типов SqlCmdText, SqlParam.
Ориентируясь на код в ваших предыдущих вопросах, могу предположить, что будет работать следующий подход:
string n_kdk = ...;
int ceh = ...;
var conditions = new List<string>();
var parameters = new List<SqlParam>();
if (ceh != 0)
{
conditions.Add(" KDK.CEH = @ceh ");
parameters.Add(new SqlParam("ceh", ceh.ToString()));
}
if (!string.IsNullOrWhiteSpace(n_kdk))
{
conditions.Add(" KDK.N_KDK = @n_kdk ");
parameters.Add(new SqlParam("n_kdk", n_kdk));
}
string filter = string.Join(" and ", conditions);
var sqlCmdText = new SqlCmdText(filter, parameters.ToArray());