补充一下,我的oracle客户端是11G,服务器端也是11G。
解决方案 »
- (急!急!急!)sendArray.BeginSend() error, Error=由于套接字没有连接并且(当使用一个 sendto 调用发送数据报套接字时)
- 分割容器刷新
- C#菜鸟问题
- panel1里的Form里的TextBox问题
- 字体条形码遇到的问题!!!
- 如何改变DataGridView的ColumnHeader的背景颜色?谢谢
- C# 请教 怎样在Page_Load中读取数据?
- 领导叫我处理这样一个问题:
- 有谁可以提供C#,FTP下载的源码
- 请问在C#中如何查看堆栈大小?用递归函数是否容易引起堆栈溢出?
- 求问 C#中有哪些快捷键 列如 cw+Tba 就是Console.ReadLine();
- sql问题
para.Direction = ParameterDirection.Output;
testCommand.Parameters.Add(para);ReturnValue 参数表示诸如存储过程、内置函数或用户定义函数之类的操作的返回值。
你这里不是返回值,而是输出线参数,必须搞清楚区别。
我的第二个参数定义如下:
para.Direction = ParameterDirection.ReturnValue;储存过程如下(包我也定义好了):
create or replace function f_get_charitem
(rptname in varchar2
) return kctj_pack.report_char_item is
Result kctj_pack.report_char_item ;
report_char_item kctj_pack.report_char_item;
beginOPEN report_char_item FOR
select * from (
select 'KC001' as ftp_reportname,'客车报1' as reportname,'字段1' as field , '车种字典' as para_dic,'车种' as para_field from dual union all
select 'KC001' as ftp_reportname,'客车报1' as reportname,'字段2' as field , '车型字典' as para_dic,'车型' as para_field from dual union all
select 'KC002' as ftp_reportname,'客车报2' as reportname,'字段1' as field , '区段字典' as para_dic,'区段' as para_field from dual union all
select 'KC002' as ftp_reportname,'客车报2' as reportname,'字段2' as field , '单位字典' as para_dic,'单位' as para_field from dual )
where ftp_reportname=rptname or reportname =rptname;
result := report_char_item ;
return(Result);
end f_get_charitem;
OracleDbType.Varchar2 修改 为OracleType.VarChar 就没有错误。奇怪啊。
create or replace package kctj_pack is -- Author : WRF
-- Created : 2009-11-5 14:48:33
-- Purpose : sssssssssssssssssssssss
-- Public type declarations
TYPE report_char_item IS REF CURSOR;
TYPE report_data_item IS REF CURSOR; --TYPE user_batch_report IS REF CURSOR;
-- Public constant declarations
--<ConstantName> constant <Datatype> := <Value>; -- Public variable declarations
--<VariableName> <Datatype>; -- Public function and procedure declarations
--function <FunctionName>(<Parameter> <Datatype>) return <Datatype>;end kctj_pack;
[code=SQL]
create or replace PROCEDURE p_get_charitem
(rptname in varchar2,
report_char_item OUT SYS_REFCURSOR
)
AS
begin
OPEN report_char_item FOR
select * from (
select 'KC001' as ftp_reportname,'客车报1' as reportname,'字段1' as field , '车种字典' as para_dic,'车种' as para_field from dual union all
select 'KC001' as ftp_reportname,'客车报1' as reportname,'字段2' as field , '车型字典' as para_dic,'车型' as para_field from dual union all
select 'KC002' as ftp_reportname,'客车报2' as reportname,'字段1' as field , '区段字典' as para_dic,'区段' as para_field from dual union all
select 'KC002' as ftp_reportname,'客车报2' as reportname,'字段2' as field , '单位字典' as para_dic,'单位' as para_field from dual )
where ftp_reportname=rptname or reportname =rptname;
end p_get_charitem;
using System.Data.OracleClient; 不用using Oracle.DataAccess.Client;
OracleDbType.Varchar2 修改 为OracleType.VarChar 就没有错误。
使用Oracle.DataAccess时,如果要用参数名绑定参数,必须指明属性OracleCommand.BindByName = true;
这个属性默认为false,按照添加参数的顺序来绑定。
OracleCommand.BindByName = true;
解决,谢谢qldsrx的帮助。