CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  C#

执行ORACLE中的存储过程出错:ORA-01036 非法的变量名/编号,急!!在线等

楼主cg2003(美丽)2004-11-04 10:53:30 在 .NET技术 / C# 提问

我在VS中写的存储过程如下:  
  CREATE   OR   REPLACE   PROCEDURE   P_TEST_DEPT  
  (  
          iDeptNO     IN     number,  
          strDname   IN     varchar2  
  )  
  AS  
  BEGIN  
          insert   into   TEST_DEPT   (DEPTNO,DNAME)   values   (iDeptNO,strDname);  
  END   P_TEST_DEPT;  
   
  在下面的程序中执行:  
  string   source   =   "user   id=spm;data   source=spmdb;password=spm";  
  string   select   =   "select   *   from   TEST_DEPT";  
   
  try  
  {  
          OracleConnection   conn   =   new   OracleConnection(source);  
          conn.Open();  
          OracleDataAdapter   da   =   new   OracleDataAdapter(select,conn);  
   
          DataSet   ds   =   new   DataSet();  
          da.Fill(ds,"DEPT");  
          dataGrid1.SetDataBinding(ds,"DEPT");  
   
          OracleCommand   cmd   =   new   OracleCommand("P_TEST_DEPT",conn);     //P_TEST_DEPT为存储过程名  
          cmd.CommandType   =   CommandType.StoredProcedure;  
          cmd.Parameters.Add(new   OracleParameter("iDeptNO   ",OracleType.Number,2,"DEPTNO"));  
          cmd.Parameters.Add(new   OracleParameter("strDname",OracleType.VarChar,14,"DNAME"));  
   
          cmd.Parameters[0].Value   =   textBox3.Text;       //这儿可能也有错,该参数为整型??  
          cmd.Parameters[1].Value   =   textBox4.Text;  
          cmd.ExecuteNonQuery();     //在此出错:ORA-01036   非法的变量名/编号  
   
          ds.Clear();  
          da.Fill(ds,"DEPT");  
          dataGrid1.SetDataBinding(ds,"DEPT");  
   
          conn.Close();  
  }  
  catch   (Exception   ex)  
  {  
          MessageBox.Show(ex.Message.ToString());  
  }  
   
   
  问题点数:20、回复次数:11Top

1 楼cg2003(美丽)回复于 2004-11-04 10:55:11 得分 0

该存储过程在VS中先运行了Top

2 楼cg2003(美丽)回复于 2004-11-04 11:12:21 得分 0

请哪位高手看看,先谢!!Top

3 楼cg2003(美丽)回复于 2004-11-04 11:32:18 得分 0

高手在哪儿???Top

4 楼jinbingg(bing)回复于 2004-11-04 12:12:49 得分 5

参数可能有问题Top

5 楼jinbingg(bing)回复于 2004-11-04 12:14:41 得分 0

Covert.toint(textBox3.Text.toString().trim())  
  Top

6 楼jinbingg(bing)回复于 2004-11-04 12:19:01 得分 0

sorry   我看错了上面的我说的不对  
  首先你的查询在oralce   数据库里面定义游标才可以的查询的  
  (1)创建一个包,含有一个游标类型:(一个数据库中只需作一次)  
   
  CREATE   OR   REPLACE   PACKAGE   Test  
      AS  
                TYPE   Test_CURSOR   IS   REF   CURSOR;  
  END   Test;  
   
  (2)过程:  
   
  CREATE   OR   REPLACE   PROCEDURE   GetCategoryBooks  
  (  
            p_CURSOR   out   Test.Test_CURSOR,         --   这里是上面包中的类型,输出参数  
            p_CatogoryID   INTEGER  
  )  
  AS  
  BEGIN  
            OPEN   p_CURSOR   FOR  
                        SELECT   *   FROM   Books  
                        WHERE   CategoryID=p_CatogoryID;  
  END   GetCategoryBooks;  
  (3).NET   程序中:  
   
  OracleParameters   parameters   =   {  
            new   OracleParameter("p_CURSOR",   OracleType.CURSOR,   2000,   ParameterDirection.Output,   true,   0,   0,   "",  
                      DataRowVersion.Default,   Convert.DBNull),  
            new   OracleParameter("p_CatogoryID",   OracleType.Int32)  
  };  
   
  parameters[1].Value   =   22;  
   
  OracleConnection   connection   =   new   OracleConnection(   ConnectionString   );  
  OracleCommand   command   =   new   OracleCommand("GetCategoryBooks",   connection);  
  command.CommandType   =   CommandType.StoredProcedure;  
   
  foreach(OracleParameter   parameter   in   parameters)  
            command.Parameters.Add(   parameter   );  
   
  connection.Open();  
  OracleDataReader   dr   =   command.ExecuteReader();  
   
  while(dr.Read())  
  {  
          //   你的具体操作。这个就不需要我教吧?  
  }  
  connection.Close();Top

7 楼cg2003(美丽)回复于 2004-11-04 12:22:31 得分 0

还是一样的问题Top

8 楼cg2003(美丽)回复于 2004-11-04 12:29:54 得分 0

谢,等会在试一下你上面的方法Top

9 楼cg2003(美丽)回复于 2004-11-04 14:16:16 得分 0

UPTop

10 楼Jeff20040819(美丽)回复于 2004-11-04 14:45:39 得分 15

不用定义游标,你太粗心了,在参数iDeptNO后面多了一个空格,去掉空格就行  
   
  cmd.Parameters.Add(new   OracleParameter("iDeptNO   ",OracleType.Number,2,"DEPTNO"));Top

11 楼AllenKOO(阿伦)回复于 2005-02-24 14:13:49 得分 0

应该不是空格的问题啊。我的跟这个好像。。也是不对。。同样的出错信息。Top

相关问题

  • ORACLE的存储过程的变量定义问题
  • 存储过程OUT变量?
  • Oracle存储过程
  • Oracle 存储过程
  • Oracle存储过程(急)
  • oracle的存储过程
  • Oracle存储过程两问
  • oracle 存储过程 急问!!!!!!!
  • oracle存储过程问题
  • 存储过程变量问题

关键词

  • 存储过程
  • ds
  • source
  • ideptno
  • dept
  • 出错
  • oracleparameter
  • strdname
  • 游标
  • oracletype

得分解答快速导航

  • 帖主:cg2003
  • jinbingg
  • Jeff20040819

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo