帮助:执行oracle 存储过程没有得到值?

fuzhan820 2004-03-29 05:50:09
private void Button7_Click(object sender, System.EventArgs e)
{
string str="Provider=Microsoft OLE DB Provider for Oracle;User ID=czg;Password=111;Data Source=ecard";

OleDbConnection nwindConn = new OleDbConnection(str);

OleDbCommand sampleCMD = new OleDbCommand("myProcedure", nwindConn);
sampleCMD.CommandType = CommandType.StoredProcedure;

//OleDbParameter sampParm = sampleCMD.Parameters.Add("RETURN_VALUE", OleDbType.Integer);
//sampParm.Direction = ParameterDirection.ReturnValue;

OleDbParameter V_ID = sampleCMD.Parameters.Add("V_ID", OleDbType.VarChar, 12);
//V_ID.Value ="ff";
V_ID.Direction=ParameterDirection.Input;
V_ID.Value="ff";


OleDbParameter sampParm = sampleCMD.Parameters.Add(":Num", OleDbType.Integer);
sampParm.Direction = ParameterDirection.Output;


nwindConn.Open();
sampleCMD.ExecuteNonQuery();
int ReturnNum ;
Response.Write(sampleCMD.Parameters[":Num"].Value);
string ss=Convert.ToString(sampleCMD.Parameters[":Num"].Value);
int i1=Convert.ToInt32(ss);
switch(i1)
{
case 1:
Page.RegisterStartupScript("warnings", "<script>alert('1');</script>");
break;
case 0:
Page.RegisterStartupScript("warnings", "<script>alert('-1!');</script>");
break;
default :Page.RegisterStartupScript("warnings", "<script>alert('-1ww!');</script>");
break;
}
//ReturnNum=sampleCMD.Parameters[":RETURN_VALUE"].Value;
nwindConn.Close();
// Response.Write(sampleCMD.Parameters["@id"].Value);
Response.Write(sampleCMD);
// Response.Write(ReturnNum);

}


create or replace procedure myProcedure
(
Num out number ,
V_ID in picture.ID%Type
)
is

begin
select count(*) into Num from picture where id=V_ID;
end;

表中值:
1 001 <Long Raw> sr AAABJRAAHAAAADkAAA
2 002 <Long Raw> sr AAABJRAAHAAAADkAAB
3 003 <Long Raw> sr AAABJRAAHAAAADkAAC
4 004 <Long Raw> sr AAABJRAAHAAAADkAAD
5 Sample Value <Long Raw> test AAABJRAAHAAAADkAAE
6 ff <Long Raw> test AAABJRAAHAAAADkAAF
7 15 <Long Raw> test AAABJRAAHAAAADkAAG
...全文
138 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
fuzhan820 2004-03-31
  • 打赏
  • 举报
回复
今天豆腐问我一个操作Access数据库无法更新的问题。查了一个下午才找到原因。汗颜,问题出在OleDbCommand 或 OdbcCommand 中使用参数的时候,有些特殊要求,自己没注意到这些要求。

这些要求包括:

1、OLE DB .NET Framework 数据提供程序和 ODBC .NET Framework 数据提供程序不支持用于将参数传递到 SQL 语句或存储过程的命名参数。在此情况下,必须使用问号 (?) 占位符,如以下示例所示。SELECT * FROM Customers WHERE CustomerID = ?

2、将参数用于 OleDbCommand 或 OdbcCommand 时,向 Parameters 集合中添加参数的顺序必须与存储过程中所定义的参数顺序相匹配。OLE DB .NET Framework 数据提供程序和 ODBC .NET Framework 数据提供程序将存储过程中的参数视为占位符,并且将按顺序使用这些参数值。另外,返回值参数必须是添加到 Parameters 集合中的第一批参数。
因此,向 Parameters 集合添加 Parameter 对象的顺序必须直接对应于该参数的问号占位符的位置

今天所犯的错误就是不小心把参数的顺序跟SQL中参数的顺序不一致造成的。
解决了。
jupiterII 2004-03-30
  • 打赏
  • 举报
回复
oracle要返回多行记录的话,要把查询出的记录存入游标,然后返回这个游标
fuzhan820 2004-03-30
  • 打赏
  • 举报
回复
?

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧