无效的SQL语句

时间:2015-06-23 03:52:45

标签: c# oracle

当我运行以下代码时,我得到error

  

无效的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();

3 个答案:

答案 0 :(得分: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. 在插入语句中,您正在插入一个字符串。它应该包含在'

答案 1 :(得分: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);

如果您使用的是winforms(或类似的)应用程序,则显示Messagebox:

MessageBox.Show(sqlcommand);

这将在一行打印出您的命令,以便您可以看到语法中出现错误的位置。

答案 2 :(得分:1)

如果我错了,请纠正我,但我认为你的字符串中必须有空格,否则它们只能作为没有空格的大字汇集在一起​​。

尝试:

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