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

Dynamic SQL Error SQL Error COde =-104 Token Unknown - line 1, column 150

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();

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

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

您复制的示例代码:

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

您根据此示例制作的代码:

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

@name”中没有点,但“@textBox2.Text”中突然有点了

Error #2: for SQL output-parameters 仅指定参数数据类型就足够了,因为值来自数据库。但是对于输入参数,数据类型和值都是必需的。更重要的是,通常您只能提供值,因为数据库库会 "infer" 来自值的数据类型。但是必须为每个使用的输入参数提供该值。

您复制的示例代码:

fbCom.Parameters.AddWithValue("name", var);

您根据此示例制作的代码:

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

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

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

您复制的示例代码:

....VALUES ( @id, @name, @score)"....
fbCom.Parameters.AddWithValue("name", var);

您根据此示例制作的代码:

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

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

为了使您的代码像示例代码一样有效,您必须修正这三个错误:

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