当前位置: 首页 > 知识库问答 >
问题:

ORA-01036:更新gridview时变量名称/编号非法

章丰茂
2023-03-14

我想更新gridview中的行的单元格。但我得到的错误是

ORA-01036:非法变量名称/编号

cmd.ExecuteNonQuery()

下面是我的代码:-

protected void SaveChanges(object sender, EventArgs e)
{   
    myConn.Open();
    string excelData = Grid1ExcelData.Value;
    string excelDeletedIds = Grid1ExcelDeletedIds.Value;

    string[] rowSeparator = new string[] { "|*row*|" };
    string[] cellSeparator = new string[] { "|*cell*|" };

    string[] dataRows = excelData.Split(rowSeparator, StringSplitOptions.None);

    for (int i = 0; i < dataRows.Length; i++)
    {
        string[] dataCells = dataRows[i].Split(cellSeparator, StringSplitOptions.None);
        string mkey = dataCells[0];
        string shipName = dataCells[1];
        string shipCity = dataCells[2];
        string shipAddress = dataCells[3];
        string shipCountry = dataCells[4];
        string orderDate = dataCells[5];
        bool sent = dataCells[6] == "yes";

        string insertUpdateQuery = "";
        if (!string.IsNullOrEmpty(mkey))
        {
            insertUpdateQuery = "UPDATE B_Order_new SET ShipName = @ShipName, ShipCity = @ShipCity, ShipAddress = @ShipAddress, ShipCountry = @ShipCountry, OrderDate = @OrderDate, Sent = @Sent WHERE MKEY = @MKEY";
        }
        else
        {
            insertUpdateQuery = "INSERT INTO B_Order_new (ShipName, ShipCity, ShipAddress, ShipCountry, OrderDate, Sent) " +
                                 "VALUES(@ShipName, @ShipCity, @ShipAddress, @ShipCountry, @OrderDate, @Sent)";
        }
        OracleCommand cmd = new OracleCommand(insertUpdateQuery, myConn);
        var orderedOn = DateTime.ParseExact(orderDate, "dd/MM/yyyy", null);
        cmd.Parameters.Add("@ShipName", OracleType.VarChar).Value = shipName;
        cmd.Parameters.Add("@ShipCity", OracleType.VarChar).Value = shipCity;
        cmd.Parameters.Add("@ShipAddress", OracleType.VarChar).Value = shipAddress;
        cmd.Parameters.Add("@ShipCountry", OracleType.VarChar).Value = shipCountry;
        cmd.Parameters.Add("@OrderDate", OracleType.DateTime).Value = orderedOn;
        cmd.Parameters.Add("@Sent", OracleType.Char).Value = true;

        if (!string.IsNullOrEmpty(mkey))
        {
            cmd.Parameters.Add("@MKEY", OracleType.Number).Value = mkey;
        }
        cmd.ExecuteNonQuery();
        if (insertUpdateQuery != "")
        {
            Page.ClientScript.RegisterStartupScript(typeof(Page), "CloseScript", "alert('Data Updated succesfully');", true);
        }
    }
    if (!string.IsNullOrEmpty(excelDeletedIds))
    {
        OracleCommand deleteComm = new OracleCommand("DELETE FROM Orders WHERE OrderID IN (" + excelDeletedIds + ")", myConn);
        deleteComm.ExecuteNonQuery();
    }
    myConn.Close();
    Grid1.DataBind();
}

共有1个答案

齐奕
2023-03-14

问题是您使用了错误的绑定变量语法(看起来您使用的是SQL服务器参数绑定语法)。Oracle的ADO. NET提供程序希望您使用前缀,而不是@

所以尝试这样的方法:

insertUpdateQuery = "UPDATE B_Order_new SET ShipName = :ShipName, ShipCity = :ShipCity, ...

然后在设置值时,不需要为其添加前缀:

cmd.Parameters.Add("ShipName", OracleType.VarChar).Value = shipName;
cmd.Parameters.Add("ShipCity", OracleType.VarChar).Value = shipCity;
...

编辑

另外,如果要按名称绑定参数,请确保将oraclecondmand.BindByName属性设置为true。否则,将按位置进行绑定。

 类似资料:
  • 请帮帮我 获取日期范围的数据时出错 错误 ora-01036非法变量名称/编号

  • 我有下面的insert查询 每次我尝试运行此查询时,都会出现此错误 我做了一些研究,显然这意味着其中一个变量不在SQL语句中。对我来说不是这样,我检查了语句、数据库(oracle)表和所有绑定变量,它们都匹配。 错误上的行号将表明它是$driveable变量。我做了一个检查,这是被发送到页面罚款。 不知道还有什么地方可以看,所以任何帮助都会很好。

  • 为什么在Oracle DB中出现此错误? cx_Oracle。ORA-01036:非法变量名称/数字

  • 我已经创建了一个API,希望将数据插入oracle数据库。但我收到一条错误消息“error:ORA-01036:非法变量名/编号”。我不知道我犯了什么错误。希望能帮我解决这个问题。先谢谢你。 [错误:ORA-01036:非法变量名/编号]{errorNum:1036,偏移量:0}

  • 我面临的问题,在更新表单视图值使用sqldatasSource绑定与Oracle数据库。 我的选择和插入事件工作正常,所有列和参数都正确。 但当我点击下面的更新按钮时,出现了错误: "ORA-01036:非法变量名称/数字" 以下是我在sqldatasource(与oracle绑定)中使用的更新命令: 我的问题解决了,因为我没有使用主键来匹配在哪里条件,当我用主键更改在哪里条件时,它开始工作。 在

  • 我正在尝试使用oracledb客户端从nodejs对oracle数据库执行查询,并得到“ORA-01036:非法变量名/编号”。我尝试了多种建议的方法来传递我的变量,但失败了。使用硬代码值的查询。 以下是我的示例代码: 获取"ORA-01036:非法变量名称/数字"或空结果