【问题标题】:Data is not inserting oracle table using ODP.NET through asp.net数据未通过 asp.net 使用 ODP.NET 插入 oracle 表
【发布时间】:2014-08-20 04:31:28
【问题描述】:

我正在使用 ODP.NET Oracle.DataAccess.Client 通过 Asp.net c# 在 Oracle 表中插入记录。 oracle 表是 tblGroup 和 GROUPNAME varchar2,GROUPDETAILS varchar2 是列名 但数据没有插入。我正在使用以下代码

 public void insertRecord(string StudentgroupName, string groupDetails) 
            {
                using (OracleConnection con = GetConnection())
                {

                    OracleCommand cmd = new OracleCommand();
                    cmd.Connection = con; //assigning connection to command
                    cmd.CommandType = CommandType.Text; //representing type of command
                    cmd.CommandText = "INSERT INTO tblGroup (GROUPNAME,GROUPDETAILS) values(@GROUPNAME,@GROUPDETAILS)";

                    //adding parameters with value
                    cmd.Parameters.Add("@GROUPNAME", StudentgroupName);
                    cmd.Parameters.Add("@GROUPDETAILS", groupDetails);

                    con.Open(); //opening connection
                    cmd.ExecuteNonQuery();


                }
            }

并出现以下错误

Oracle.DataAccess.Client.OracleException ORA-00936: 在 Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, String procedure, Boolean bCheck) 处缺少表达式Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode, OracleConnection conn, String procedure, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, Boolean bCheck) at Oracle.DataAccess.Client.OracleCommand.ExecuteNonQuery() at SchoolsManagementSystem.DAL.insertRecord (String StudentgroupName, String groupDetails) in d:\c#\SchoolsManagementSystem\SchoolsManagementSystem\App_Code\DAL.cs: d:\c#\SchoolsManagementSystem\SchoolsManagementSystem\Group 中 SchoolsManagementSystem.Group.btnSubmit_Click(Object sender, EventArgs e) 的第 85 行。 aspx.cs:第 26 行

指导我如何解决我的问题

【问题讨论】:

    标签: c# asp.net oracle odp.net


    【解决方案1】:

    在您的 SQL 语句中,使用冒号前缀表示绑定参数,而不是 @:

    INSERT INTO t (COL1) values(:param1)
    

    在 SQL Server 上使用 @ 符号可以,但在 Oracle 上不行。

    此外,您的绑定语句只需要使用名称“GROUPNAME”,在参数中不需要前缀字符 @ 或 :。Add() 调用。

    像这样:

    cmd.CommandText =
       "INSERT INTO tblGroup (GROUPNAME,GROUPDETAILS) values(:GROUPNAME, :GROUPDETAILS)";
    
    cmd.Parameters.Add("GROUPNAME", StudentgroupName);
    cmd.Parameters.Add("GROUPDETAILS", groupDetails);
    

    【讨论】:

    • 不需要前缀的有趣注释。我没有要测试的 Oracle,但它会引发错误或前缀被引擎简单地忽略?
    • Oracle SQL 解析器使用冒号表示绑定参数,无论是在 SQL、PL/SQL 还是宿主语言中。 ADO 驱动程序可能会或可能不会抱怨,但 Oracle 会。 @ 不是标识符或绑定变量的有效字符,因此您可能会收到解析错误。我只知道它失败了,因为我有一些在 Oracle 和 SQL Server 上销售的数据库工具,我必须在两者之间使用条件代码。
    • 谢谢你的好意,我只是好奇。
    猜你喜欢
    • 2012-03-24
    • 2022-01-09
    • 2021-10-27
    • 2021-11-14
    • 1970-01-01
    • 2011-08-05
    • 2015-09-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多