Firebird — term token unknown

Хочу создать триггер для автоинкремента. При запуске запроса, выходит ошибка token unknown - term
Использую .Net 4, Firebird 2.5 Embedded
/** * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann * (http://qbnz.com/highlighter/ and http://geshi.org/) */ .csharp.geshi_code {font-family:monospace;} .csharp.geshi_code .imp {font-weight: bold; color: red;} .csharp.geshi_code .kw1 {color: #0600FF;} .csharp.geshi_code .kw2 {color: #FF8000; font-weight: bold;} .csharp.geshi_code .kw3 {color: #008000;} .csharp.geshi_code .kw4 {color: #FF0000;} .csharp.geshi_code .kw5 {color: #000000;} .csharp.geshi_code .co1 {color: #008080; font-style: italic;} .csharp.geshi_code .co2 {color: #008080;} .csharp.geshi_code .co3 {color: #008080;} .csharp.geshi_code .coMULTI {color: #008080; font-style: italic;} .csharp.geshi_code .es0 {color: #008080; font-weight: bold;} .csharp.geshi_code .es_h {color: #008080; font-weight: bold;} .csharp.geshi_code .br0 {color: #000000;} .csharp.geshi_code .sy0 {color: #008000;} .csharp.geshi_code .st0 {color: #666666;} .csharp.geshi_code .st_h {color: #666666;} .csharp.geshi_code .nu0 {color: #FF0000;} .csharp.geshi_code .me1 {color: #0000FF;} .csharp.geshi_code .me2 {color: #0000FF;} .csharp.geshi_code span.xtra { display:block; }

 createData.CommandText =
         "set term !! ; "+
         "CREATE TRIGGER STUDENT_BI FOR STUDENT "+
         "ACTIVE BEFORE INSERT POSITION 0 "+
         "AS "+
      "BEGIN "+
                       "IF (NEW.ID IS NULL) THEN "+
           "NEW.ID = GEN_ID(GEN_STUDENT_ID,1); "+
      "END " +
            "!! "+
         "set term !! ;";          
createData.ExecuteNonQuery();
 


p.s.
term - который вначале запроса.

1 ответов


Насколько помню, DDL-код запускается по-другому. Попробуй так:


FbConnection c = new FbConnection(@"Database=employee.fdb;User=SYSDBA;Password=masterkey");
 c.Open();

 FbBatchExecution fbe = new FbBatchExecution(c);
 foreach (string cmd in script.Results) {
    fbe.SqlStatements.Add(cmd);
 }

 fbe.Execute();
 c.Close();
 

Вот ссылка на болеей полный пример: http://web.firebirdsql.org/dotnetfirebird/blog/2005/03/batch-sqlddl-execution.html
Кроме того, есть ощущение, что в самом запросе у тебя есть ошибка. Вообще маленькая рекомендация, выноси тексты запросов в ресурсы, а сам текст запроса формируй и проверяй в бд:-) А затем вставляй их в строку ресурсов:-)