Command.CommandText ="SELECT getprice(参数) Price FROM Dual";
float fltPrice = (float)Command.ExecuteScalar();

解决方案 »

  1.   

    http://blog.joycode.com/percyboy/articles/29915.aspx
      

  2.   

    1楼的,返回错误!OracleConnection cn=new OracleConnection(strCon);//strCon为连接字符串
    cn.Open();
    OracleCommand cmd=cn.CreateCommand();
    cmd.CommandText=="SELECT hotelman.getprice(1101) Price FROM hotelman.room";//存储过程名(550)
    float fltPrice = (float)Command.ExecuteScalar();//(551)
    try
    {
    cmd.ExecuteNonQuery();
    MessageBox.Show("调用成功"); }
    catch(Exception err)
    {
    throw new Exception(err.Message);
    }
    finally
    {
    cn.Close();
    }返回错误Form1.cs(550): 只有 assignment、call、increment、decrement 和 new 对象表达式可用作语句
    Form1.cs(551): 不可访问“System.Windows.Forms.Command”,因为它受保护级别限制
      

  3.   

    我按大象的例子做,提示我
    未处理的“System.Exception”类型的异常出现在 testoracle.exe 中。其他信息: ORA-06550: 第 1 行, 第 7 列: 
    PLS-00306: 调用 'GETPRICE' 时参数个数或类型错误
    ORA-06550: 第 1 行, 第 7 列: 
    PL/SQL: Statement ignored
    源码如下:
    public void testfunctoin()
    {
    string strCon="user id=system;data source=oradb;password=sa";
    OracleConnection connection = new OracleConnection( strCon );
    OracleCommand command = new OracleCommand("hotelman.getprice", connection);
    OracleParameter  parameters =  new OracleParameter("Rno", OracleType.VarChar);
    command.CommandType = CommandType.StoredProcedure;
    command.Parameters.Add( parameters );
    connection.Open();
    try
    {
    command.ExecuteNonQuery();
    int returnValue =int.Parse( parameters.Value.ToString()); //接收函数返回值
    MessageBox.Show("调用成功"+returnValue.ToString()); }
    catch(Exception err)
    {
    throw new Exception(err.Message);
    }
    finally
    {
    connection.Close();
    }数据表如下:
    roomROOMNO      varchar2     10
    TYPEID      number  
    POSITION    varchar2     100
    OBJLIST     varchar2     400
    PRICE        number      8        2
    STATUS       number      1        0
      

  4.   

    cmd.CommandText=="SELECT getprice(1101) Price FROM dual";//用这一句,如果你的函数有包再加上包名.函数。你调用的并非存储过程(550)
    float fltPrice = (float)Command.ExecuteScalar();//(551)
      

  5.   

    cmd.CommandText=="SELECT hotelman.getprice(1101) Price FROM hotelman.room";//存储过程名(550)
    还有没看见,老兄,赋值能用 "=="号吗?请注意这句:  CommandText="SELECT getprice(1101) Price FROM dual";
      

  6.   

    提示错误:未处理的“System.Exception”类型的异常出现在 testoracle.exe 中。其他信息: ORA-00904: "GETPRICE": 无效的标识符dual是什么?
      

  7.   


    SELECT getprice(1101) Price FROM dual这句拿到SQLPlus或PL/SQL中执行,看有没有结果?
      

  8.   

    SELECT getprice(1101) Price FROM dual
           *
    ERROR 位于第 1 行:
    ORA-00904: "GETPRICE": 无效的标识符
      

  9.   

    呵呵,那就是getPrice函数有问题啊。是不是用了包?
    顶楼你没有把源代码贴全,申明部门没有贴出来。
      

  10.   

    没用包,是用语句直接创建的CREATE FUNCTION HOTELMAN.GetPrice
    ( Rno IN HOTELMAN.Room.RoomNo%Type )
    RETURN number
    AS
    outPrice number;
    BEGIN
      SELECT Price INTO outPrice FROM HOTELMAN.Room
      WHERE RoomNo=''||Rno||'';
      RETURN outPrice;
    END GetPrice;
      

  11.   

    public void testfunctoin()
    {
    string strCon="user id=system;data source=oradb;password=sa";
    OracleConnection connection = new OracleConnection( strCon );
    OracleCommand command = new OracleCommand("hotelman.getprice", connection);
    OracleParameter  parameters =  new OracleParameter("Rno", OracleType.VarChar);
    command.CommandType = CommandType.StoredProcedure;
    command.Parameters.Add( parameters );
    connection.Open();
    try
    {
    command.ExecuteNonQuery();
    int returnValue =int.Parse( parameters.Value.ToString()); //接收函数返回值
    MessageBox.Show("调用成功"+returnValue.ToString()); }
    catch(Exception err)
    {
    throw new Exception(err.Message);
    }
    finally
    {
    connection.Close();
    } }
      

  12.   

    CommandText=="SELECT HOTELMAN.getprice('1101') Price FROM dual";
    OR
    CommandText=="SELECT HOTELMAN.getprice(\'1101\') Price FROM dual";TEST?
      

  13.   

    大虾可以了
    CommandText="SELECT HOTELMAN.getprice('1101') Price FROM dual";
    但是我不懂,dual指的是什么?请告知!谢谢!~
      

  14.   

    大虾可以了
    CommandText="SELECT HOTELMAN.getprice('1101') Price FROM dual";
    但是我不懂,dual指的是什么?请告知!谢谢!~