社区
C#
帖子详情
急:使用OracleClient调用存储过程异常:错误参数数量和类型
eeff
2003-09-14 10:10:32
如果换用Oledb驱动,程序就正确,但是用OracleClient就出现这样的错误,为什么啊
...全文
170
7
打赏
收藏
急:使用OracleClient调用存储过程异常:错误参数数量和类型
如果换用Oledb驱动,程序就正确,但是用OracleClient就出现这样的错误,为什么啊
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
eeff
2003-09-14
打赏
举报
回复
好消息,好像可以了,非常感谢,没想到这个也要对应,晕了!
非常感谢。
saucer
2003-09-14
打赏
举报
回复
have you tried?
oPara[0].ParameterName="as_table_code";
....
oPara[1].ParameterName="as_row_id";
eeff
2003-09-14
打赏
举报
回复
我得Oracle版本是 8.1.6.0.0 会不会有影响啊
eeff
2003-09-14
打赏
举报
回复
真不好意思,那个冒号我是看别的地方要加什么冒号我就加上,本来没有的,没有也不对,刚才我有试了一下,用MSDAORA.1还是成功(没有冒号的)。我想应该是通用的。
我担心的DbType不对,但又似乎不可能,ProgName是不是要用getrowid(:sTableCode,:sRowId),但我试了还不对,按理来说,我用的都是Ixxx接口来访问,对象类具体的实例是对应的派生类(OracleClient),不会错的,最让我不解的是换用Oledb驱动,用OleDb控件的类就正确。可是一样的代码啊
saucer
2003-09-14
打赏
举报
回复
try to remove ":" from the parameter name and make sure the parameter name matches what is in the sp
eeff
2003-09-14
打赏
举报
回复
下面的代码但是用OracleClient时就说这样的错误
+ System.SystemException {"ORA-06550: 第 1 行, 第 7 列:
PLS-00306: 调用 'GETROWID' 时参数数量或类型错误
ORA-06550: 第 1 行, 第 7 列:
PL/SQL: Statement ignored
"} System.SystemException
你应该遇到过,帮忙看看是怎么回事?谢谢。下面是代码。到底那一个地方有误啊
/// < summary>
/// 根据传入的表的代码,返回新的行号
/// < /summary>
/// < param name="sTypeCode"> 要取行号的表代码< /param>
/// < returns> 返回的指定表的新行号< /returns>
public string GetRowID(string sTableCode)
{
string sRowId = "";
try
{
IDbDataParameter[] oPara =this.NewDBDataParameter(2);//申请空间及赋予对应类型的参数对象
oPara[0].ParameterName=":sTableCode";
oPara[0].DbType=DbType.AnsiString;
//oPara[0].DbType=OracleType.VarChar
oPara[0].Value = sTableCode;
oPara[0].Direction=ParameterDirection.Input;
oPara[1].ParameterName=":sRowId";
oPara[1].DbType=DbType.AnsiString;
oPara[1].Direction = ParameterDirection.Output;
oPara[1].Size=32;
IDataParameterCollection oParaCollection = ExecuteSpPara("getrowid",oPara);
sRowId = ((IDataParameter)oParaCollection["sRowId"]).Value.ToString();
}
catch(Exception e)
{
Log.WriteLog("System","GetRowID" ,"取表[" + sTableCode + "]的记录行号出错!出错信息是:" + e.ToString());
sRowId = "";
}
return(sRowId);
}
/// < summary>
/// 执行一个存储过程,并返回相应的参数集合
/// < /summary>
/// < param name="sProcName"> 存储过程名称< /param>
/// < param name="oInPara"> 存储过程传入参数< /param>
/// < returns> 存储过程返回参数集合< /returns>
public IDataParameterCollection ExecuteSpPara(string sProcName,IDbDataParameter[] oInPara)
{
IDbCommand IDbCmd=this.NewDBCommand();
IDbConnection IDbConn=null;
if(this.LongDbConn==null)
{//如果存在长连接,则使用长连接,否则根据连接参数建立新的连接。
IDbConn=NewDBConnection();
IDbConn.Open();
}
else
{
IDbConn=this.LongDbConn;
}
IDbCmd.CommandType=CommandType.StoredProcedure;
IDbCmd.CommandText=sProcName;
IDbCmd.Connection=IDbConn;
for(int i=0; i< oInPara.Length;i++)
{
IDbCmd.Parameters.Add(oInPara[i]);
}
try
{
IDbCmd.ExecuteNonQuery();
}
catch(System.Data.OracleClient.OracleException oe)
{
Log.WriteLog("System",this.ToString(),oe.ToString());
}
catch(Exception e)
{
Log.WriteLog("System",this.ToString(),e.Message);
}
if(IDbConn!=null && ! IDbConn.Equals(this.LongDbConn) && IDbConn.State==ConnectionState.Open)
{
IDbConn.Close();
}
return IDbCmd.Parameters;
}
create or replace procedure getrowid(as_table_code IN VARCHAR2,as_row_id OUT VARCHAR2) IS
ld_value NUMBER;
ld_year number(4);
ld_month number(2);
ld_day number(2);
ls_code_param varchar2(2);
BEGIN
saucer
2003-09-14
打赏
举报
回复
你最好还是把你的编码贴出来,注意ORACLE要用
SELECT * FROM Customers WHERE CustomerID = :pCustomerID
myDataAdapter.SelectCommand.Parameters.Add("pCustomerID", OracleType.VarChar, 80).Value = "Smith";
02-PostgreSQL
存储过程
的进阶介绍(含游标、
错误
处理、自定义函数、事务)
PostgreSQL
存储过程
进阶介绍,游标、
错误
处理、自定义函数、事务。
浅谈 MySQL
存储过程
与函数
本篇学习于B站尚硅谷 康师傅的Mysql2022 yyds👍 Mysql
存储过程
🔃 与 函数📊:
存储过程
和 存储函数说实话本人工作中不经常
使用
,康师傅也说 阿里开发准则 不建议
使用
存储过程
/函数… 但这并不是咱不会的理由🙃 很久以前学习过,也听说了,
存储过程
是mysql5.0新增的 大致就像编程语言的 方法/函数一样, 将复杂的sql 逻辑封装在一起,
使用
的时候
调用
一下即可. 应用程序无需关注内部的逻辑,只需要传入对应的
参数
, 就可以返回想要的结果. 要知道很多数据库 本身也是有很多方便的 函数
Oracle
学习之
错误
代码
本篇文章是对
Oracle
错误
代码进行了详细的总结与分析
Oracle
错误
总结及问题解决 ORA
ORA
错误
大全
postgresql-
存储过程
创建一个自定义的 PL/pgSQL 函数,可以
使用
CREATE FUNCTION 语句AS $$DECLAREBEGINstatements;...END;$$CREATE 表示创建函数,OR REPLACE 表示替换函数定义;name 是函数名;括号内是
参数
,多个
参数
使用
逗号分隔;argmode 可以是 IN(输入)、OUT(输出)、INOUT(输入输出)或者 VARIADIC(
数量
可变),默认为 IN;argname 是
参数
名称;argtype 是
参数
的
类型
;
C#
110,538
社区成员
642,577
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章