Задать условие для текстбокса 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 шт):

Автор решения: Alexander Petrov

При чём тут текстбокс? К чему весь этот код?

Давайте я перефразирую ваш вопрос.

Есть два значения, получаемые откуда-то. Если они не пустые, то следует добавить их в результат. Причём, если присутствуют оба, между ними следует вставить 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());
→ Ссылка