我正在使用Oracle数据库(客户端要求)开发win form应用程序。我使用过Typed数据集。我已经创建了一个存储过程来插入记录并生成一个自动递增的no。使用顺序。当我在Oracle SQL开发人员上测试它时它工作正常。但是当我使用类型化的数据集访问这个存储过程时 - 记录正在插入但我得到的是null而不是序列号。
我也尝试使用Oracle Command,但它说 -
PLS-00201: identifier 'INSERTORDER' must be declared
其中INSERTORDER是存储过程名称。
以下是通过类型化数据集访问它的代码。插入但返回0或null。
decimal? result = null;
Int64 i = Convert.ToInt64(order.INSERTORDER("ord-678", "shyam", out result));
这是oracle sql developer上正常运行的存储过程。
create or replace PROCEDURE INSERTORDER
(
ORDERNO IN VARCHAR2
, CUSTMNAME IN VARCHAR2
, ORDERID OUT NUMBER
) AS
BEGIN
INSERT INTO orderdetails (orderno, customername)
VALUES (ORDERNO, CUSTMNAME)
returning orderid-1 into ORDERID;
END INSERTORDER;
这里是用于访问存储过程的oracle命令代码 - (说标识符' INSERTORDER'必须声明)
try
{
string connStringIMDB = "DATA SOURCE=192.168.1.14:1521/xe;DBA PRIVILEGE=SYSDBA;PASSWORD=FidelisBazaSLO_SODO;USER ID=FIDELISBAZASLO_SODO";
OracleConnection objConn = new OracleConnection(connStringIMDB);
OracleCommand objCmd = new OracleCommand();
objCmd.Connection = objConn;
objCmd.CommandText = "INSERTORDER";
objCmd.CommandType = CommandType.StoredProcedure;
objCmd.Parameters.Add("ORDERNO", OracleDbType.Varchar2).Value = "20";
objCmd.Parameters.Add("CUSTMNAME", OracleDbType.Varchar2).Value = "sadjsah";
objCmd.Parameters.Add("ORDERID", OracleDbType.Long).Direction = ParameterDirection.Output;
objConn.Open();
objCmd.ExecuteNonQuery();
System.Console.WriteLine("Number of employees in department 20 is {0}", objCmd.Parameters["ORDERID"].Value);
objConn.Close();
}
catch (Exception exc)
{
}