Incorrect syntax near the keyword 'WHERE' - C#

270
24 декабря 2017, 06:36

ошибка в этой строке SqlDataReader dr = sqlCommand1.ExecuteReader(); остальной код программы

public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        int kodOkv;
        private void button2_Click(object sender, EventArgs e)
        {
            OkvedName oName = new OkvedName();
            if (oName.ShowDialog() != DialogResult.OK)
            {
                textBox3.Text = "";
                return;
            }
            else
            {
                kodOkv = oName.okvKod;
                textBox3.Text = oName.okvName;
            }
        }
        string sql;
        private void Form1_Load(object sender, EventArgs e)
        {
            sql = @"SELECT        UL.IdUL, UL.Ogrn, UL.Inn, UL.Kpp, Licenz.NumLic, Licenz.DtResh, Licenz.LicOrg, Licenz.VidLic, Licenz.SostLic, Licenz.DtStart, Licenz.DtEnd, 
                         Licenz.DtStop, Licenz.StStartNow, VidLic.vlName
FROM            UL INNER JOIN
                         Licenz ON UL.IdUL= Licenz.IdUL INNER JOIN
                         VidLic ON Licenz.VidLic = VidLic.IdVidLic;";
        }
        private void button1_Click(object sender, EventArgs e)
        {
            string f = "";
            string mesOgrn = "", mesInn = "";
            if (textBox1.Text != "")
            {
                mesOgrn = testOgrn(textBox1.Text);
                if (mesOgrn != "")
                    MessageBox.Show(mesOgrn);
                    else 
                f += "(Ogrn = '" + textBox1.Text + "') AND";
           }
            if (textBox2.Text!="")
            {
                mesInn = testInn(textBox2.Text);
                if (mesInn != "")
                    MessageBox.Show(mesInn);
                else
                f+= "(Inn '" + textBox2.Text + "')AND ";
}
            if (textBox3.Text != "")
                f += "(IdVidLic.vlName = '" + textBox3.Text + "') AND";
            if(f!="")
                f = "\nWHERE"+ f.Remove (f.Length - 5);
            BindingSource bs = new BindingSource();
            sqlCommand1.CommandText = sql + f;
            sqlConnection1.Open();
            SqlDataReader dr = sqlCommand1.ExecuteReader();
            if (dr.HasRows)
                bs.DataSource = dr;
            dr.Close();
            sqlConnection1.Close();
            //dataGridView1.AutoGenerateColumns = false;
            dataGridView1.DataSource = bs; 
        }
        private bool isClipher(string s)
        {
            for (int i = 0; i < s.Length; i++)
            {
                if (!char.IsDigit(s[i]))
                    return false;
            }
            return true;
        }
        private string testOgrn (string s)
        {
            if (s.Length != 13)
                return "Длина ОГРН не равна 13;";
            if (!isClipher(s))
                return "В коде ОГРН нецифровая информация";
            return "";
        }
        private string testInn(string s)
        {
            if (s.Length != 10)
                return "Длина ИНН не равна 10";
            if (!isClipher(s))
                return "В коде ИНН нецифровая информация";
            return "";
        }
    }
}
Answer 1

Чем бы ни кончалась к этому моменту

f = "\nWHERE"+ f.Remove (f.Length - 5);

строка f, Вы отрезаете от нее на один символ больше, чем следует, захватывая закрывающую круглую скобку последнего условия.

List<string> conditions = new List<string>();
...
conditions.Add("(Ogrn = @Ogrn)");
sqlCommand1.Parameters.AddWithValue("@Ogrn", textBox1.Text);
...
conditions.Add("(Inn = @Inn)"); // !! у Вас пропущено =
sqlCommand1.Parameters.AddWithValue("@Inn", textBox2.Text);
...
conditions.Add("(IdVidLic.vlName = @vlName)");
sqlCommand1.Parameters.AddWithValue("@vlName", textBox3.Text);
...
string f = "";
if (conditions.Count > 0)
  f = " WHERE " + string.Join(" AND ", conditions);

Параметризируйте SQL запросы: https://en.wikipedia.org/wiki/SQL_injection

READ ALSO
C# Как убрать пространство иконки в ToolStripMenuItem

C# Как убрать пространство иконки в ToolStripMenuItem

Возле menuitem всегда квадратная пустая иконкаКак ее убрать?

300
Как создать продолжение таймера

Как создать продолжение таймера

Создал таймер в игре, работаетПри закрытий приложения время сохраняется в PlayerPrefs, при новом запуске игры появляется кнопка Продолжить игру

233
WPF не работает SelectedItem DataGrid в RowDetailsTemplate

WPF не работает SelectedItem DataGrid в RowDetailsTemplate

Есть DataGrid и в его RowDetailsTemplate еще один DataGrid

258
Заменить список в коде на список в файле

Заменить список в коде на список в файле

Подскажите пожалуйста, как эту часть кода заменить, что бы список слов не вписывать ручками в коде, а записывались бы в список из файлаtxt

220