我在Oracle中定义了一存储过程,返回一个结果集,如:
create or replace package pk1
is
type rc is ref cursor;
procedure pk_p1 (v_REID varchar2,dvT_rc out rc);
end;该存储过程(略)在Oracle中调试通过,但我无法用C#或VB.NET调用(我用的是OleDB)
我看了一些文章说用OracleClient,但我.Net环境中没有OracleClient,如何才能使用?我的程序中:
myCommand.CommandText = "pk1.pk_p1"
myCommand.CommandType = CommandType.StoredProcedure
myCommand.Parameters.Add("@v1", OleDb.OleDbType.VarChar).Value = str1
Dim myRS As OleDb.OleDbDataReader
myRS = myCommand.ExecuteReader()
错:说参数个数不对
create or replace package pk1
is
type rc is ref cursor;
procedure pk_p1 (v_REID varchar2,dvT_rc out rc);
end;该存储过程(略)在Oracle中调试通过,但我无法用C#或VB.NET调用(我用的是OleDB)
我看了一些文章说用OracleClient,但我.Net环境中没有OracleClient,如何才能使用?我的程序中:
myCommand.CommandText = "pk1.pk_p1"
myCommand.CommandType = CommandType.StoredProcedure
myCommand.Parameters.Add("@v1", OleDb.OleDbType.VarChar).Value = str1
Dim myRS As OleDb.OleDbDataReader
myRS = myCommand.ExecuteReader()
错:说参数个数不对
解决方案 »
- C#高手帮忙看看,有谁遇到这个错误!
- .net2.0怎么从数据库读取路径值 并赋给页面里的<img src=
- c#中怎样把byte[2]转换为二进制
- 如何让imagebutton控件不回传,直接执行客户端事件?
- 飞信脱离dotnet框价下的webservice服务调用错误
- 怎样在部署时,添加一个注册表键,使其值等于用户的安装目录?
- 招聘.NET工程师
- 问个关于内存释放的问题......
- 有关DIRECTSHOW的,层叠给高分。求解释。
- 如何在自定义的类中使用response.write语句
- 我用C#在win2000下写了一个项目,安装到XP下,界面上的图标都看不见了,是为何,怎么处理啊?
- 如何学习C#
使用oraclehelper类,http://community.csdn.net/Expert/topic/3912/3912516.xml?temp=.6948206
你是说什么应该可以?
OleDB应该可以接收返回的结果集?能给个例子吗?to wu896222(wu896222)
oraclehelper?是什么样的东西?能作个简单的介绍吗?
你说的是存储过程吗?我的存储过程的确是在包中的,主要是返回了结果集,其他的参数都能解决,就是无法得到结果集,更无法传入结果集(以前有个存储过程中有一输入参数为一光标,就是因为无法传入,所以后来只有修改输入参数,到现在我也不知道怎么传送结果集到存储过程中,郁闷~~~)
*
*CREATE OR REPLACE PACKAGE TestProc AS TYPE refCursorxx IS REF CURSOR;
* PROCEDURE ReturnDataSet(para OUT refCursorxx);
* END;
*
* CREATE OR REPLACE PACKAGE BODY Testproc AS
* PROCEDURE ReturnDataSet(para OUT refCursorxx) IS
* BEGIN
* OPEN para FOR SELECT * FROM ROLLPLAN;
* END ReturnDataSet;
* END;
*
*****************************************************************************/ /// <summary>
/// 通过存储过程返回查询表的信息
/// </summary>
/// <param name="sprocName">存储过程名称</param>
/// <returns>DataTable</returns>
protected DataTable GetTable(string sprocName)
{
conn.Open();
try
{
mycm.CommandText = sprocName;
mycm.CommandType = CommandType.StoredProcedure;
mycm.Parameters.Add(new OracleParameter("para", OracleType.Cursor)).Direction = ParameterDirection.Output;
myda.SelectCommand = mycm; myda.Fill(myds); }
catch(Exception ex)
{
throw ex;
}
finally
{
//无论语句执行正确与否,都关闭连接释放资源
conn.Close();
}
return myds.Tables[0];
}
用oledb 必须用Oracle 带的那个
连接串如下,你应该可以看懂
Provider=OraOLEDB.Oracle;Data Source=Ora9i1;User ID=username;Password=pass;PLSQLRSet=1;PLSQLRSet=1 必须否则调用不要存储过程然后
myCommand.CommandText = "{CALL pk1.pk_p1(?)}"; //返回游标的那个不用给参数
//myCommand.CommandType 也不用设置
myCommand.Parameters.Add("@v1", OleDb.OleDbType.VarChar).Value = str1
Dim myRS As OleDb.OleDbDataReader
myRS = myCommand.ExecuteReader()
//就OK 了
[Oracle 目录]\oledb\samples 下有个 VB6 的烈子可以看看。