我在ORACLE的SYSTEM用户下建立了一个存储过程的包pkg_test,里面有个函数fun_test.我想调用这个函数,也就是system.pkg_test.fun_test这个函数。该函数有一个参数, varchar类型的返回一个number 的值。
我的代码如下。
OracleConnection conn = new OracleConnection (source);
OracleCommand oCommand = new OracleCommand (?,conn) ;
问题一 问号中应该填什么,书上说应该填写存储过程的名字,但是我是想调用包里面的函数,请问该怎么写。
问题二 怎么给这个函数添加参数。
麻烦把剩下的代码写完吧 谢谢。
我的代码如下。
OracleConnection conn = new OracleConnection (source);
OracleCommand oCommand = new OracleCommand (?,conn) ;
问题一 问号中应该填什么,书上说应该填写存储过程的名字,但是我是想调用包里面的函数,请问该怎么写。
问题二 怎么给这个函数添加参数。
麻烦把剩下的代码写完吧 谢谢。
解决方案 »
- 帮忙解决个问题,谢谢各位大神
- 本人想编写一个证券行情预测系统,但是遇到了几点问题,请高手或者有经验的人进来解答。
- listbox换行问题。
- 公司里没有权限不能安装framework2.0....工程白写...等待奇迹出现..
- 高分求c#实现分割条有效代码!!!!!!!!!!!!!1兄弟们抢分了......
- C#如何传值给textbox(MySql数据库)
- 虚心向大家请教一个C#问题
- 数据转换Byte[] 与String 互转?(急.........在线等!)
- 600分求如何使具有集合类型的自定义控件(如ToolBar)在设计时动态的绘制界面(如ToolBar的buttons属性)?up有分
- 如何在前台在添加TreeView节点
- 多个超级链接
- 微软 logical thinking 面试题目
OracleCommand oCommand = new OracleCommand (?,conn) ;
问题一 问号中应该填什么,书上说应该填写存储过程的名字,但是我是想调用包里面的函数,请问该怎么写。
//填写SQL语句,比如select * from TableName
问题二 怎么给这个函数添加参数。
//
private int GetData(string strSelect)
{
OracleConnection conn = new OracleConnection (source);
OracleCommand oCommand = new OracleCommand (strSelect,conn) ; return 1;
}
Oracle方面
1.创建Oracle过程存储
create or replace procedure proce_test(paramin in varchar2,paramout out varchar2,paraminout in out varchar2)
as
varparam varchar2(28);
begin
varparam:=paramin;
paramout:=varparam|| paraminout;
end;
2.测试过程存储
declare
param_out varchar2(28);
param_inout varchar2(28);
begin
param_inout:='ff';
proce_test('dd',param_out,param_inout);
dbms_output.put_line(param_out);
end;C#方面
引用Oracle组件
using System;
using System.Data;
using System.Data.OracleClient; namespace WebApplication4
{
public class OraOprater
{
private OracleConnection conn=null;
private OracleCommand cmd=null;
public OraOprater()
{
string mConn="data source=ora9i.ora.com;user id=ora;password=ora"; //连接数据库
conn=new OracleConnection(mConn);
try
{
conn.Open();
cmd=new OracleCommand();
cmd.Connection=conn;
}
catch(Exception e)
{
throw e;
}
} public string SpExeFor(string m_A,string m_B)
{
//存储过程的参数声明
OracleParameter[] parameters={
new OracleParameter("paramin",OracleType.VarChar,20),
new OracleParameter("paramout",OracleType.VarChar,20),
new OracleParameter("paraminout",OracleType.VarChar,20)
};
parameters[0].Value=m_A;
parameters[2].Value=m_B;
parameters[0].Direction=ParameterDirection.Input;
parameters[1].Direction=ParameterDirection.Output;
parameters[2].Direction=ParameterDirection.InputOutput;
try
{
RunProcedure("proce_test",parameters);
return parameters[1].Value.ToString();
}
catch(Exception e)
{
throw e;
}
} private void RunProcedure(string storedProcName,OracleParameter[] parameters)
{
cmd.CommandText=storedProcName;//声明存储过程名
cmd.CommandType=CommandType.StoredProcedure;
foreach(OracleParameter parameter in parameters)
{
cmd.Parameters.Add(parameter);
}
cmd.ExecuteNonQuery();//执行存储过程
}
}
}2.调用包内方法
包的写法:CREATE OR REPLACE PACKAGE pkg_cms AS TYPE myrctype IS REF CURSOR; PROCEDURE site_GetSiteData(Id_ number, p_rc OUT myrctype); END pkg_cms;/CREATE OR REPLACE PACKAGE BODY pkg_cms AS PROCEDURE site_GetSiteData(Id_ number,p_rc OUT myrctype) IS BEGIN OPEN p_rc FOR Select Id, Name, Url, Folder_Name, Desccms, Char_Name, DB_Address, DB_User, DB_Password, DB_Name, DB_ConnString, HttpRoot From WebSite_Info
END site_GetSiteData; END pkg_cms;
C#调用:
new OracleParameter(PARM_ID_, OracleType.Number, 8),
new OracleParameter("p_rc", OracleType.Cursor, 2000, ParameterDirection.Output, true, 0, 0, "",DataRowVersion.Default, Convert.DBNull)//此处为包体中声明的游标类型};return OracleHelper.ExecuteReader(OracleHelper.CONN_STRING_BASE, CommandType.StoredProcedure,"pkg_cms.site_GetSiteData", param);//关键:调用时候先写包名