关于读取oracle数据使用ExecuteReader遇到的问题

TheEighthDay 2010-06-07 09:50:45
private void BeginQuery()
{
...


while(true)
{
try
{

SqlConnection cnn=new SqlConnection();
cnn.ConnectionString="Persist Security Info=false;User ID="+ CStatic.Userid1

+";Password="+ CStatic.Password1 +";Database=" + CStatic.database1 +";Server="+ CStatic.Server1;
cnn.Open();

SqlCommand scmd=new SqlCommand("Lis_getLibDetail",cnn);
scmd.CommandType=CommandType.StoredProcedure;

SqlDataReader sre1=scmd.ExecuteReader();

while(sre1.Read())
{
//////

while(true)
{
try
{

OracleConnection cnn1=new OracleConnection();
cnn1.ConnectionString="User ID="+ CStatic.Userid + ";data

source=" + CStatic.Server + ";Password=" + CStatic.Password ;


OracleCommand ocmd1=new OracleCommand

("lis_interface.Prc_GetLibResult",cnn1);
ocmd1.CommandType=CommandType.StoredProcedure;
////////填加存储过程的参数
OracleParameter p1;
p1=ocmd1.Parameters.Add(new OracleParameter

("prm_checkcode",OracleType.VarChar,20));
p1.Direction = ParameterDirection.Input;
p1.Value= membcode;

OracleParameter p2;
p2=ocmd1.Parameters.Add(new OracleParameter

("prm_checkcode",OracleType.VarChar,20));
p2.Direction = ParameterDirection.Input;
p2.Value=testidplus;


/////出参游标
OracleParameter p3;
p3 = ocmd1.Parameters.Add(new OracleParameter

("pr",OracleType.Cursor));
p3.Direction = ParameterDirection.Output;

cnn1.Open();

HERE: OracleDataReader sre2=ocmd1.ExecuteReader();


while(sre2.Read())
{...
}


当前函数作为thread来执行的,当执行到HERE:的时候就报:PLS-00703 :multiple instances of named argument in list之类,不知道SQLserver和Oracle在这个地方有冲突没有?另有线程thread1也大概用的是同样的模式,但是thread1没有start(),求高人解决
...全文
334 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
TheEighthDay 2010-06-09
  • 打赏
  • 举报
回复
发现传了两个prm_checkcode,真郁闷 啊
-小蕾- 2010-06-08
  • 打赏
  • 举报
回复
和线程没关系,是你传参的问题,再检查一下。。。
捷哥1999 2010-06-08
  • 打赏
  • 举报
回复
:multiple instances of named argument in list之类,

是不是给存储过程传递的参数太多了?检查看看存储过程的参数定义。
jimh 2010-06-08
  • 打赏
  • 举报
回复
Lis_getLibDetail一共有几个参数,是否有默认值,
你的oracle应该没有配置,默认情况下参数是按顺序传递的,需要修改配置改成按参数名字传递。
jiezi316 2010-06-08
  • 打赏
  • 举报
回复
和线程肯定是没有关系的哈!
hyblusea 2010-06-08
  • 打赏
  • 举报
回复
有同样参数个数的重载, 但是无法从你的调用中区分出是要调用哪一个过程.
比如某个参数的数据类型可以同时被隐式转换成重载的多个类型, 这个时候就会发生上述错误.

检查参数类型, 使用合适的参数类型作为传入参数.
dlsgliss 2010-06-08
  • 打赏
  • 举报
回复
本人还是菜鸟,只能帮顶!
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Data.OracleClient; using System.Data.Odbc; public partial class data : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { OracleConnection myconnection = new OracleConnection(" Data Source=ORCL;Persist Security Info=True;User ID=SCOTT;Password=tiger;Unicode=True"); myconnection.Open(); string sql = "select * from emp"; OracleCommand mycommand = new OracleCommand(sql, myconnection); OracleDataReader myReader; myReader = mycommand.ExecuteReader(); Response.Write("进入oracle自带emp表查询结果为"); Response.Write(""); Response.Write("");

110,545

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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