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

系统。数据。OracleClient.ORA-01036:非法变量名称/数字

顾嘉德
2023-03-14

我面临着这样一个错误:告诉我使用了非法变量或数字,并且它在我的代码中突出显示了这一行line 34:rowsAffected=command.ExecuteNonQuery() 。我认为我的参数有问题,需要根据Oracle格式进行更改,但不确定。我确实用p.Course\u id替换了所有@,然后用?p.Coursep.Course\u id替换了所有@,就像我在oracle存储过程中所做的那样,但它们都不起作用。我还是犯了同样的错误。请帮我解决这个问题。非常感谢。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data;
using System.Configuration;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Data.OracleClient;



public class PostForum
{
    public static int INSERTforum(int course_Id, string question, string posterName, DateTime blog_date)
    {
        int rowsAffected = 0;

        using (OracleConnection connection = ConnectionManager.GetDatabaseConnection())
        {
            OracleCommand command = new OracleCommand("INSERTforum", connection);
            command.CommandType = CommandType.StoredProcedure;

            command.Parameters.Add("@course_Id", SqlDbType.Int).Value = course_Id;
            command.Parameters.Add("@question", SqlDbType.VarChar).Value = question;
            command.Parameters.Add("@posterName", SqlDbType.VarChar).Value = posterName;
            command.Parameters.Add("@blogdate", SqlDbType.DateTime).Value = blog_date;


            rowsAffected = command.ExecuteNonQuery();
        }
        return rowsAffected;

    }
}

这是我的存储过程

CREATE OR REPLACE PROCEDURE INSERTforum(
       p_course_id IN forum.COURSE_ID%TYPE,
       p_question IN forum.QUESTION%TYPE,
       p_postername IN forum.POSTERNAME%TYPE,
       p_blogdate IN forum.BLOG_DATE%TYPE)
AS
BEGIN

  INSERT INTO forum ("COURSE_ID", "QUESTION", "POSTERNAME", "BLOG_DATE") 
  VALUES (p_course_id, p_question,p_postername, p_blogdate);

  COMMIT;

END;
/

共有1个答案

周滨海
2023-03-14

我认为您的问题是由于在Add方法调用中使用了无效的枚举引起的

如果运行此代码,您可能会注意到Int32的OracleType与SqlDbType不同

OracleType e = OracleType.Int32;
int i = (int)e;
Console.WriteLine(i.ToString());   // Output = 28
SqlDbType z = SqlDbType.Int;
i = (int)z;
Console.WriteLine(i.ToString());   // Output = 8

因此,我建议为ADO.NET提供程序使用正确的枚举。

有趣的是,可以使用SqlDbType而不是OracleType调用Add,并且不会引起编译器时间错误。之所以会发生这种情况,是因为Add方法有一个重载,它接受一个对象作为第二个参数(在构造参数时,它用于直接传递一个值)。

另一种方法是使用OracleParameterCollection

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

  • 我已经用“select*from person”测试过了,效果不错。我想得到一份名字以“a”开头的人的名单。这可能吗?

  • 你好,美丽的人们。 我正在尝试使用连接到OracleDB的node.js创建RESTAPI,但我正在竭尽全力让这些愚蠢的绑定变量正常工作。 这是我的代码: 由于某种原因,我得到了错误 如果我删除bind变量,分配一个静态值,并删除sql语句后的“req.params.ScheMA”,并将括号留空,它就可以工作。 我知道我拉绑定变量的方式一定很简单,但是我把头发拔出来了。 请帮帮我欧比万克诺比。。。

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

  • 我有一个网格视图。它连接到一个SqlDataSource。我的数据库是Oracle。 当我运行网页时,选择command works,我会看到列表中的项目。单击“删除”按钮时,出现以下错误: ORA-01036:非法变量名称/数字 以下是我的GridView和SqlDataSource:

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