Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# FBC命令列未知?_C#_Firebird_Firebird2.5_Firebird .net Provider - Fatal编程技术网

C# FBC命令列未知?

C# FBC命令列未知?,c#,firebird,firebird2.5,firebird-.net-provider,C#,Firebird,Firebird2.5,Firebird .net Provider,我正在使用FBCommand将数据插入ASP.NET中的单个表中,并使用 在insert方法中,我创建以下命令: INSERT INTO PERSONEN ( NACHNAME, VORNAME, GEBURTSDATUM, STRASSE, PLZ, ORT, LAND, TELEFONNUMMER, EMAIL) VALUES (:Nachname, :Vorname, :Geburtsdatum, :Strasse, :PLZ, :Ort, :Land, :Telefonnummer,

我正在使用
FBCommand
将数据插入ASP.NET中的单个表中,并使用

在insert方法中,我创建以下命令:

INSERT INTO PERSONEN ( NACHNAME, VORNAME, GEBURTSDATUM, STRASSE, PLZ, ORT, LAND, TELEFONNUMMER, EMAIL) 
VALUES (:Nachname, :Vorname, :Geburtsdatum, :Strasse, :PLZ, :Ort, :Land, :Telefonnummer, :Email) 
RETURNING ID into :Returnvalue;
(我在这里使用
而不是
@
,因为当我使用
@
作为参数时,它给了我一个未知的标记“@”错误)

当它试图以“ExecuteOnQuery”的形式运行命令时,我得到了SQL错误-206列Unknown NACHNAME

我确信这里没有打字错误:

我不知道可能是什么错误。我甚至还关注了Firebird主页上的FAQ(奇怪的是,他们用
@
添加了参数,但那是另一个故事)

以下是该方法的完整代码:

private int InsertOrUpdateRecord(bool ForceNew)
{
    string command = "";
    if(ForceNew)
    {
        command = "INSERT INTO PERSONEN ( NACHNAME, VORNAME, GEBURTSDATUM, STRASSE, PLZ, ORT, LAND, TELEFONNUMMER, EMAIL)" +
        " VALUES (:Nachname, :Vorname, :Geburtsdatum, :Strasse, :PLZ, :Ort, :Land, :Telefonnummer, :Email)";
    }
    else
    {
        command = "UPDATE OR INSERT INTO PERSONEN (ID, NACHNAME, VORNAME, GEBURTSDATUM, STRASSE, PLZ, ORT, LAND, TELEFONNUMMER, EMAIL)" +
         " VALUES (:ID, :Nachname, :Vorname, :Geburtsdatum, :Strasse, :PLZ, :Ort, :Land, :Telefonnummer, :Email)";
    }
    command += " RETURNING ID into :Returnvalue;";
    FbCommand cmd = new FbCommand(command);
    cmd.CommandType = CommandType.Text;
   
    //ID ist ein Sonderfall, diese hat keine Textbox Controls so wie die Spalten in der folgenden For Schleife, da sie readonly ist.
    cmd.Parameters.AddWithValue(":" + gdvPersonDetailedData.Columns[0].HeaderText, gdvPersonDetailedData.Rows[0].Cells[0].Text);//@ID
    for (int i = 1; i < gdvPersonDetailedData.Columns.Count; i++)//Übrige Parameter
    {
        cmd.Parameters.AddWithValue(":" + gdvPersonDetailedData.Columns[i].HeaderText, ((TextBox)gdvPersonDetailedData.Rows[0].Cells[i].Controls[0]).Text);
    }

    cmd.Parameters.Add(":Returnvalue", FbDbType.Integer).Direction = ParameterDirection.Output;//Für den Returnwert
    cmd.Connection = c;
    if(cmd.Connection.State != ConnectionState.Open)
    {
        cmd.Connection.Open();
    }
    cmd.ExecuteNonQuery();
    return (int)cmd.Parameters[":Returnvalue"].Value;
}
private int InsertOrUpdateRecord(bool-ForceNew)
{
string命令=”;
如果(新的)
{
command=“插入PERSONEN(NACHNAME、VORNAME、GEBURTSDATUM、STRASSE、PLZ、ORT、LAND、TELEFONNUMMER、电子邮件)”+
“值(:Nachname,:Vorname,:Geburtsdatum,:Strasse,:PLZ,:Ort,:Land,:telefonnumer,:Email)”;
}
其他的
{
command=“更新或插入PERSONEN(ID、NACHNAME、VORNAME、GEBURTSDATUM、STRASSE、PLZ、ORT、LAND、TELEFONNUMMER、电子邮件)”+
“值(:ID,:Nachname,:Vorname,:Geburtsdatum,:Strasse,:PLZ,:Ort,:Land,:telefonnumer,:Email)”;
}
命令+=“将ID返回到:Returnvalue;”;
FbCommand cmd=新FbCommand(命令);
cmd.CommandType=CommandType.Text;
//ID在Sonderfall中,由keine Textbox控制,因此在Schleife的文件夹中可以看到,这是只读的。
cmd.Parameters.AddWithValue(“:”+gdvPersonDetailedData.Columns[0]。HeaderText,gdvPersonDetailedData.Rows[0]。单元格[0]。Text);/@ID
对于(int i=1;i
Firebird ADO.net提供程序(FirebirdSql.Data.FirebirdClient)不支持将
作为参数前缀,它只支持将
@
作为参数前缀。使用
作为前缀是导致错误的原因,列未知错误由
:Nachname
参数触发,而不是由列列表中的列
Nachname
触发。冒号未包含在错误消息中的事实与Firebird中冒号前缀名称的解析方式有关(Firebird仅支持PSQL(Firebird的过程语言)中的命名参数,但DSQL(动态SQL,Firebird的“正常”查询语言)的解析器会处理这些参数)

使用
@
时出现的问题是由于在查询中的@Returnvalue中包含了
INTO
子句仅在PSQL中有效,在DSQL中无效

接受
返回
值的正确方法是通过
返回
子句中列的名称引用该值(在Firebird 3中,您也可以将其命名为别名):

/。。。
命令+=“返回ID”;
// ...
cmd.Parameters.Add(“ID”,fbdtype.Integer).Direction=ParameterDirection.Output;
// ...
返回(int)命令参数[“ID”]值;

我不认为您实际上在FlameRobin中尝试了完全相同的查询,因为您的
returning
子句被破坏了。我最初尝试将@用于我的所有参数,然后它只说@是无效/未知的标记。我通过编写存储过程解决了问题。这就成功了。我希望我再也不用碰火鸟或火鸟了。他们都嘲笑我,让我失望。@Moonpaw如果你试图在FlameRobin中使用
@
,那就行不通了。Firebird本身只知道位置参数(
),使用
@
是特定于FirebirdSql.Data.FirebirdClient的,它将在这些命名参数和位置参数之间进行转换。@Moonpaw无论如何,很遗憾听到您不喜欢这些问题。我很好奇,Firebird到底是怎么看不起你的?