动态SQL错误SQL错误COde = -104令牌未知 - 第1行,第150列

时间:2017-06-02 10:02:24

标签: c# firebird

FbConnection adder = new FbConnection(ClsConnection.FirebirdSQL);
            adder.Open();
            FbCommand fbcmd = new FbCommand("INSERT INTO 
 EMPLOYEE(EMPLOYEE_NO,EMPLOYEE_LASTNAME,
 EMPLOYEE_FIRSTNAME,EMPLOYEE_MIDDLENAME,
 EMPLOYEE_BDATE,EMPLOYEE_STATUS,
 EMPLOYEE_POSITION) VALUES( 
 @textBox1.Text,@textBox2.Text,@textBox3.Text,
 @textBox4.Text,@textBox5.Text,@textBox6.Text,
 @textBox7.Text)", adder);
            // fbcmd.Parameters.AddWithValue(
            //FbCommand fbCom = new FbCommand("INSERT INTO players(ID,name,score) VALUES (@id,@name,@score)", fbCon);
            //fbCom.Parameters.AddWithValue("id", zID + 1);
            //fbCom.Parameters.AddWithValue("name", var);
            //fbCom.Parameters.AddWithValue("score", score);
            fbcmd.Parameters.Add("textBox1", FbDbType.SmallInt);
            fbcmd.Parameters.Add("textBox2", FbDbType.VarChar);
            fbcmd.Parameters.Add("textBox3", FbDbType.VarChar);
            fbcmd.Parameters.Add("textBox4", FbDbType.VarChar);
            fbcmd.Parameters.Add("textBox5", FbDbType.VarChar);
            fbcmd.Parameters.Add("textBox6", FbDbType.VarChar);
            fbcmd.Parameters.Add("textBox7", FbDbType.VarChar);

            fbcmd.ExecuteNonQuery();

        fbcmd.Connection.Close();

1 个答案:

答案 0 :(得分:1)

我可以看到你在根据自己的需要改变某个人的例子时犯了三个错误。 也许还有更多,但我不是C#家伙,也无法发现它们。

错误#1: SQL术语不包含点。我认为参数标识符可以归类为SQL术语。

您复制的示例中的代码:

  

.... VALUES(@ id,@ name,@ score)" ....

您通过此示例制作的代码:

  

..... VALUES(@ textBox1.Text,@ textBox2.Text,.....

" @name"但是突然间有#34; @textBox2.Text"

错误#2:对于SQL输出参数,仅指定参数数据类型就足够了,因为该值来自数据库。但是对于输入参数,数据类型和值都是必需的。更多的是,通常你只能提供价值,因为数据库库会推断出#34;来自值的数据类型。但必须为每个使用的输入参数提供值。

您复制的示例中的代码:

  

fbCom.Parameters.Add WithValue ("名称", var );

您通过此示例制作的代码:

  

fbcmd.Parameters.Add(" textBox2",FbDbType.VarChar);

示例中有值绑定,但突然在您的代码中没有任何值。

错误#3:在编程中使用某个命名实体时,无论是函数,变量还是参数,通常都是通过名称来引用它们,通过标识符。这意味着在程序中想要使用同一实体的所有位置 - 名称应该完全相同。

您复制的示例中的代码:

  

....价值观(@id,@ 名称,@ score)" ....
  fbCom.Parameters.AddWithValue(" name ",var);

您通过此示例制作的代码:

  

..... VALUES(@ textBox1.Text,@ textBox2.Text ,.....
  fbcmd.Parameters.Add(" textBox2 ",FbDbType.VarChar);

源代码示例代码在两行中使用了SAME标识符 - " name"标识符。但是您使用了不同的名称:一行使用" textBox2.Text'标识符,但另一行使用" textBox2'代替。

为了让您的代码能够像示例代码一样工作,您必须解决这三个错误:

  1. 修复SQL中的参数名称,因此它们将是一个术语的名称。从参数名称中删除SQL术语中不允许的点或其他符号。
  2. 不仅为您的参数提供VALUES数据类型
  3. 将值绑定到参数时,请使用与SQL中放置的完全相同的标识符。