C# 重写Oracle insert命令后的ORA-01036

C# 重写Oracle insert命令后的ORA-01036,c#,asp.net,oracle,sqldatasource,C#,Asp.net,Oracle,Sqldatasource,我正在重新编写遗留代码,并来到此查询: sqlDS.InsertCommand = "INSERT INTO SCHEMA.TABLE " + "(ID, DATUM, ID_STATE, G_AM, G_VON, DATUM_BEW) " + "VALUES (" + ((strukturen.Login)Session["svar_bew"]).ID_Bew.ToString() +

我正在重新编写遗留代码,并来到此查询:

sqlDS.InsertCommand = "INSERT INTO SCHEMA.TABLE " +
                      "(ID, DATUM, ID_STATE, G_AM, G_VON, DATUM_BEW) " +
                      "VALUES     (" + ((strukturen.Login)Session["svar_bew"]).ID_Bew.ToString() +
                      ", TO_DATE('" + _datum + "', 'DD.MM.YYYY HH24:MI:SS'), 2, TO_DATE('" + lbl_bew.Text +
                      "', 'DD.MM.YYYY'), 'ID" + ((strukturen.Login)Session["svar_bew"]).ID_Bew.ToString() +
                      "', TO_DATE('" + _datum + "', 'DD.MM.YYYY HH24:MI:SS'))";
这是可行的,但我想把这个讨厌的东西改写成一个参数化的格式,原因很明显

以下是我目前的进展:

sqlDS.InsertCommand = "INSERT INTO SCHEMA.TABLE (ID, DATUM, ID_STATE, G_AM, G_VON, DATUM_BEW) " +
                      "VALUES (:Id_Bew, TO_DATE(':Datum', 'DD.MM.YYYY HH24:MI:SS'), 2, TO_DATE(':BewAm', 'DD.MM.YYYY'), 'ID' || :Id_Bew, TO_DATE(':Datum', 'DD.MM.YYYY HH24:MI:SS'))";
                        sqlDS.InsertParameters.Add("Id_Bew", ((strukturen.Login)Session["svar_bew"]).ID_Bew.ToString());
                        sqlDS.InsertParameters.Add("Datum", _datum);
                        sqlDS.InsertParameters.Add("BewAm", lbl_bew.Text);
这是有关表格:

COLUMN      |    TYPE
-----------------------
ID          |    NUMBER
DATUM       |    DATE
/*  Columns |    ommited */
ID_STATE    |    NUMBER
G_AM        |    DATE
G_VON       |    CHAR(10 BYTE)
DATUM_BEW   |    DATE
变量还没有遵循固定的模式,所以它们是用德语声明的,在本例中更不用说了。 问题是,这个新代码现在抛出一个ORA-01036 an,我怀疑它在这个位置:

“ID”+((strukturen.Login)会话[“svar\u bew”]).ID\u bew.ToString()
-->
“ID”\124;:ID\u bew

在最初的SQL查询中,字符串“ID”包含一个从会话变量中提取的数字ID。我的怀疑是,我在参数化查询中以错误的方式包含了它,并弄糟了语法


问题是:如何解决此错误并将此insert命令转换为正确的格式?

应该在不嵌入单引号的情况下定义绑定变量

':bind_variable'
-->错误(改为普通字符串)
:绑定_变量
-->右侧

因此,当您试图添加绑定参数时,它抛出了ORA-01036:非法变量名/编号

 sqlDS.InsertCommand = "INSERT INTO SCHEMA.TABLE (ID, DATUM, ID_STATE, G_AM, G_VON, DATUM_BEW) " +
                          "VALUES (:Id_Bew, TO_DATE(:Datum, 'DD.MM.YYYY HH24:MI:SS'), 2, TO_DATE(:BewAm, 'DD.MM.YYYY'), 'ID' || :Id_Bew, TO_DATE(:Datum, 'DD.MM.YYYY HH24:MI:SS'))";
                            sqlDS.InsertParameters.Add("Id_Bew", ((strukturen.Login)Session["svar_bew"]).ID_Bew.ToString());
                            sqlDS.InsertParameters.Add("Datum", _datum);
                            sqlDS.InsertParameters.Add("BewAm", lbl_bew.Text);

谢谢,很有魅力。