社区
C#
帖子详情
急:使用OracleClient调用存储过程异常:错误参数数量和类型
eeff
2003-09-14 10:10:32
如果换用Oledb驱动,程序就正确,但是用OracleClient就出现这样的错误,为什么啊
...全文
224
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";
oledb带
参数
访问
oracle
function并获得返回值的问题,有没有人能告诉我
本文探讨了
使用
Oracle
Client
与OleDb访问
Oracle
数据库中特定函数的不同表现。通过对比两种方式的代码实现,揭示了OleDb访问
Oracle
函数时遇到的
参数
数量
与
类型
错误
,并提供了一种通过创建过程来间接
调用
函数的解决方案。
VS2010中用微软自带的System.Data.
Oracle
Client
来连接
Oracle
数据库
本文介绍了解决VS2010中因.Net框架4.0撤销System.Data.
Oracle
Client
导致无法连接
Oracle
数据库的问题。通过手动添加System.Data.
Oracle
Client
.dll引用,并配置环境变量以解决缺少
Oracle
客户端软件的问题。
oracle
client
连
oracle
库 报System.Data.
Oracle
Client
需要
Oracle
客户端软件 8.1.7 或更高版本...
本文介绍在IIS环境中部署应用时遇到的
Oracle
数据库连接问题及其解决方案,针对
使用
Oracle
Client
或OleDb方式连接
Oracle
数据库时出现的权限问题,提供详细的步骤来调整
ORACLE
_HOME目录的权限设置。
oracle
.dataaccess 连接池,原来是它(
Oracle
.ManagedDataAccess.
Client
)——再说ORA-12516故障解决...
本文详细记录了作者在处理 ORA-12516
错误
时的排查过程,涉及数据库连接池、监听配置、静态监听、初始化
参数
调整等多个方面。最终通过将 C# 应用程序的数据库驱动从
Oracle
.ManagedDataAccess.
Client
更改为 System.Data.
Oracle
Client
解决了问题,但提出了官方驱动的
使用
疑虑。
C#
111,129
社区成员
642,540
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章