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 - который вначале запроса.
Использую .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
Кроме того, есть ощущение, что в самом запросе у тебя есть ошибка. Вообще маленькая рекомендация, выноси тексты запросов в ресурсы, а сам текст запроса формируй и проверяй в бд:-) А затем вставляй их в строку ресурсов:-)