Win2003+Vs2003+Oracle9.0
建立Oracle的存储过程,如果有参数,不论是in或者out类型的,都不能够指定参数的大小,理由很简单,无法判断。
建立过程:
Ado.Net 调用Oracle的存储过程Create or replace procedure procedure_test(inpara1   in varchar2,
Ado.Net 调用Oracle的存储过程 inpara2   
in varchar2
Ado.Net 调用Oracle的存储过程)
Ado.Net 调用Oracle的存储过程
as
Ado.Net 调用Oracle的存储过程
begin
Ado.Net 调用Oracle的存储过程 ..
Ado.Net 调用Oracle的存储过程
end procedure_test;
Ado.Net 调用Oracle的存储过程
/
我们无法预知procedure_test的调用者传参数时,inpara1,inpara2的长度会是多少。

如果使用Ado.Net ,用OleDbCommand调用这个过程,那么必须指定对应inpara1,inpara2的OleDbParameter的长度。

即使参数类型是out 的,也必须指定长度,曾经看O'Reilly的Ado.Net in a Nullshell一书,在讲调用out类型参数的过程时,所举的例子的参数为Int 型,没有再显示指定参数长度Size,当时误以为对于out类型的无须指定,但是在实际应用中,对于字符型参数,如果没有长度,会报0Size的错误,必须显示指定Size,才可以调用过程;而对于Int类型的,都有自己的默认长度吧。

附调用参数为out类型的函数:
        }

附O'Reilly的例子:
过程:
Ado.Net 调用Oracle的存储过程CREATE Procedure CustomerAdd
Ado.Net 调用Oracle的存储过程(
Ado.Net 调用Oracle的存储过程
@FullName nvarchar(50),
Ado.Net 调用Oracle的存储过程
@Email nvarchar(50),
Ado.Net 调用Oracle的存储过程
@Password nvarchar(50),
Ado.Net 调用Oracle的存储过程
@CustomerID int OUTPUT
Ado.Net 调用Oracle的存储过程)
Ado.Net 调用Oracle的存储过程
AS
Ado.Net 调用Oracle的存储过程
INSERT INTO Customers
Ado.Net 调用Oracle的存储过程(
Ado.Net 调用Oracle的存储过程FullName,
Ado.Net 调用Oracle的存储过程EMailAddress,
Ado.Net 调用Oracle的存储过程Password
Ado.Net 调用Oracle的存储过程)
Ado.Net 调用Oracle的存储过程
VALUES
Ado.Net 调用Oracle的存储过程(
Ado.Net 调用Oracle的存储过程
@FullName,
Ado.Net 调用Oracle的存储过程
@Email,
Ado.Net 调用Oracle的存储过程
@Password
Ado.Net 调用Oracle的存储过程)
Ado.Net 调用Oracle的存储过程
SELECT
Ado.Net 调用Oracle的存储过程
@CustomerID = @@Identity
Ado.Net 调用Oracle的存储过程
GO
Ado.Net 调用:
Ado.Net 调用Oracle的存储过程using System;
Ado.Net 调用Oracle的存储过程
using System.Data;
Ado.Net 调用Oracle的存储过程
using System.Data.SqlClient;
Ado.Net 调用Oracle的存储过程
public class AddCustomer
}

相关文章: