刚刚研究Oracel
有点不明白
为什么.NET给Oracel 一般的sql语句传参数是参数,前面要加冒号
例如:Select pha.po_header_id From po.po_headers_all pha Where pha.po_header_id=:xxxx;
OracleParameter olaParas=new OracleParameter(":xxxx",System.Data.OracleClient.OracleType.Number)
改成这样
例如:Select pha.po_header_id From po.po_headers_all pha Where pha.po_header_id=xxxx;
OracleParameter olaParas=new OracleParameter("xxxx",System.Data.OracleClient.OracleType.Number)
就会报错但是给Procedure等传参就不要加冒号
例如:
OracleParameter olaParas=new OracleParameter("p_CatogoryID", OracleType.Int32)
上面的参数传给Procedure是不会报错的

解决方案 »

  1.   

    OracleParameter (String, OracleType)  初始化使用参数名称和数据类型的 OracleParameter 类的新实例。  这是构造函数阿
      

  2.   

    Select pha.po_header_id From po.po_headers_all pha Where pha.po_header_id=:xxxx;
    OracleParameter olaParas=new OracleParameter(":xxxx",System.Data.OracleClient.OracleType.Number)--这个你是什么时候用的
      

  3.   

    我也测试了一下
    可能是oralce中sql语句中的变量需要加:
      

  4.   

    msdn
    OracleCommand.Parameters 属性 
    属性值
    SQL 语句或存储过程的参数。默认为空集合。 
    备注
    当 CommandType 属性设置为 StoredProcedure 时,CommandText 属性应设置为存储过程的名称。如果存储过程名称包含任何特殊字符,则可能会要求用户使用转义符语法。当调用 Execute 方法之一时,该命令将执行此存储过程。用于 Oracle 的 .NET Framework 数据提供程序在向由 CommandType.Text 的 OracleCommand 调用的 SQL 语句传递参数时不支持问号 (?) 占位符。在这种情况下,必须使用命名的参数。例如: SELECT * FROM Customers WHERE CustomerID = :pCustomerID
    在 CommandType.Text 的 OracleCommand 调用的 SQL 语句中使用命名的参数时,参数名前面必须有一个冒号 (:)。但是,在存储过程或在代码的其他地方引用命名的参数时(例如,将 OracleParameter 对象添加到 Parameters 属性时),请不要在命名的参数前加上冒号 (:)。用于 Oracle 的 .NET Framework 数据提供程序自动提供冒号。