2015-06-23 4 views
0

Пока я запускаю следующий код, я получаю ошибки - неверный оператор SQL.Недопустимый оператор SQL

OleDbConnection con = new OleDbConnection(); 
con.ConnectionString = "Provider=MSDAORA;Data Source=data; 
     Password=fatemeh;User ID=personnel_temp"; 
string sqlcommand = "MAXID NUMBER" + 
        "MAXID=1175" + 
        "SELECT GROUP_ID INTO MAXID FROM GROUPS"+ 
        "MAXID:=MAXID+1" + 
        "INSERT INTO GROUPS(GROUP_ID, GROUP_NAME,DEPT_ID) 
        VALUES(MAXID," 
        + textBox1.Text + 
        ", SELECT DEPT_ID FROM PERSONNEL_TEMP.DEPARTMENT INNER 
    JOIN SHIFTS_N.GROUPS ON DEPARTMENT.DEPARTMENT_ID=GROUPS.DEPT_ID)"; 
       OleDbDataAdapter oda = new OleDbDataAdapter(sqlcommand,con); 
con.Open(); 
oda.Fill(dt); 
con.Close(); 
+0

Добавить пробела в строке –

+0

Для начала, вы можете использовать некоторые разрывы строк ... –

+0

у меня есть два соединения: 1) в shifts_n для таблицы групп и 2) в personnel_temp для таблицы отделов , как можно использовать два соединения? –

ответ

1

В настоящее время ваш запрос выглядит следующим образом:

"MAXID NUMBERMAXID=1175SELECT GROUP_ID INTO MAXID FROM GROUPSMAXID:=MAXID+1..." 

Что основная проблема заключается в том, что вам нужно сделать, это добавить пробелы, либо в начале или в конце каждой строки; и вам нужно окружить ввод строки из вашего текстового поля '; как так:

"MAXID NUMBER " + 
"MAXID=1175 " + 
"SELECT GROUP_ID INTO MAXID FROM GROUPS "+ 
"MAXID:=MAXID+1 " + 
"INSERT INTO GROUPS(GROUP_ID, GROUP_NAME,DEPT_ID) 
VALUES(MAXID, '" 
+ textBox1.Text + 
"', SELECT DEPT_ID FROM PERSONNEL_TEMP.DEPARTMENT INNER JOIN SHIFTS_N.GROUPS ON DEPARTMENT.DEPARTMENT_ID=GROUPS.DEPT_ID)"; 

Хорошая практика будет набирать все это на одной линии первого, затем разбить его на дополнительные линии.

Одна вещь вы пытаетесь увидеть, что может идти не так, когда вы выполняете вашу команду, вы можете либо написать на консоли команду, если вы запускаете консольное приложение:

Console.Writeline(sqlcommand); 

Или показать MessageBox, если вы использовании WinForms (или что-то подобное) применение:

MessageBox.Show(sqlcommand); 

Это выведет вашу команду на одной строке, так что вы можете увидеть, где вы сделали ошибки в синтаксисе.

+0

Я добавил место, но все равно получаю ту же ошибку: неверный оператор sql –

1

Исправьте меня, если я ошибаюсь, но я думаю, что вы должны иметь пробелы в своих строках, иначе они просто объединятся как большие слова без пробелов.

попробовать:

"MAXID NUMBER " + "MAXID=1175 " + "SELECT GROUP_ID INTO MAXID FROM GROUPS "+ "MAXID:=MAXID+1 " +

т.д.

3
OleDbConnection con = new OleDbConnection(); 
    con.ConnectionString = "Provider=MSDAORA;Data Source=data; 
    Password=fatemeh;User ID=personnel_temp"; 
    con.Open(); 
    string sqlcommand = "SELECT MAX(GROUP_ID) FROM GROUPS"; 
    OleDbCommand command = new OleDbCommand(sqlcommand, con); 
    Int32 MAXID = (Int32) command.ExecuteScalar(); 
    MAXID++; 
     sqlcommand = "INSERT INTO GROUPS(GROUP_ID, GROUP_NAME,DEPT_ID) "+ 
         "VALUES("+MAXID+",'" 
         + textBox1.Text + 
         "', SELECT DEPT_ID FROM PERSONNEL_TEMP.DEPARTMENT WHERE " 
+"DEPARTMENT_NAME='"+COMBOBOX1.TEXT()+"')"; 

    command = new OleDbCommand(sqlcommand, con); 
    command.ExecuteNonQuery(); 
     // OleDbDataAdapter oda = new OleDbDataAdapter(sqlcommand,con); 

    // oda.Fill(dt); 
    con.Close(); 

Я нашел две проблемы в запросе

  1. как два других ответов нет пробелов. Вам нужно добавить пробелы.
  2. В инструкции insert вы вставляете строку. Он должен заключать в '
+0

Комментарии не предназначены для расширенного обсуждения; этот разговор был [перемещен в чат] (http://chat.stackoverflow.com/rooms/81248/discussion-on-answer-by-sachu-invalid-sql-statement). –

Смежные вопросы