C#如何调用oracle上的函数?

Bill1212 2010-04-12 11:19:31
我用C#调用oracle上的函数:
CREATE OR REPLACE FUNCTION GetNextRoute(var_sn IN VARCHAR2) RETURN varchar2
。。。。。


不能成功,显示:
ERROR [42000] [Microsoft][ODBC driver for Oracle][Oracle]ORA-00900: invalid SQL statement


但是这个oracle函数在oracle sql*plus环境是可以使用的,应该没有语法上的错误,所以可能还是C#代码没写好。

我的C#代码如下:
OdbcCommand cmd = new OdbcCommand();
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "GETNEXTROUTE";
cmd.Connection = conn;


OdbcParameter parameter = new OdbcParameter("var_sn", OdbcType.VarChar, 40);
parameter.Direction = ParameterDirection.Input;
parameter.Value = tbSN.Text;

// Add the parameter to the Parameters collection.
cmd.Parameters.Add(parameter);

OdbcParameter parameter1 = new OdbcParameter();
parameter1.ParameterName = "result";
parameter1.OdbcType = OdbcType.VarChar;
parameter1.Direction = ParameterDirection.ReturnValue;
parameter1.Size = 30;


// Add the parameter to the Parameters collection.
cmd.Parameters.Add(parameter1);


cmd.ExecuteNonQuery();

请高手帮忙,看看是哪里的问题?谢谢。
...全文
651 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
l13873666736 2010-04-12
  • 打赏
  • 举报
回复
不好意思是ODP.NET
l13873666736 2010-04-12
  • 打赏
  • 举报
回复
看樣子你用的是ODBC
試下用OPD.NET,這個是ORACLE 為.NET提供的驅動。
小仙01 2010-04-12
  • 打赏
  • 举报
回复
是不是函数中的 protected static string connectionString = WebConfigurationManager.ConnectionStrings["**"].ConnectionString;写错了
jimh 2010-04-12
  • 打赏
  • 举报
回复
GetNextRoute/GETNEXTROUTE
大小写问题??
sunyfun 2010-04-12
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 sunyfun 的回复:]
不要用ODBC,用Oracle客户端的using System.Data.OracleClient;我们都是用这个的
[/Quote]装个oracle9i的客户端啥
Bill1212 2010-04-12
  • 打赏
  • 举报
回复
下面是sqlplus打开时显示的信息

SQL*Plus: Release 8.0.6.0.0 - Production on Mon Apr 12 13:31:36 2010

(c) Copyright 1999 Oracle Corporation. All rights reserved.


Connected to:
Oracle9i Enterprise Edition Release 9.2.0.8.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.8.0 - Production
Bill1212 2010-04-12
  • 打赏
  • 举报
回复
我用的应该是oracle 9i, 但不知为啥还说版本低。
Fibona 2010-04-12
  • 打赏
  • 举报
回复
提示你的Oracle版本太低,你用的是什么版本的Oracle?不会还是7.0吧,如果是8.0以前的版本那就升级好了

Fibona 2010-04-12
  • 打赏
  • 举报
回复
调用Oracle函数,跟存储过程是一样的
用System.Data.OracleClient

OracleParameter[] parameters = {
new OracleParameter("ReturnValue", OracleType.Int32, 0, ParameterDirection.ReturnValue, true, 0, 0, "",
DataRowVersion.Default, Convert.DBNull )
new OracleParameter("参数1", OracleType.NVarChar, 10),
new OracleParameter("参数2", OracleType.DateTime),
new OracleParameter("参数3", OracleType.Number, 1)
};

parameters[1].Value = "test";
parameters[2].Value = DateTime.Now;
parameters[3].Value = 1; // 也可以是 new OracleNumber(1);

OracleConnection connection = new OracleConnection( ConnectionString );
OracleCommand command = new OracleCommand("函数/程名", connection);
command.CommandType = CommandType.StoredProcedure;

foreach(OracleParameter parameter in parameters)
command.Parameters.Add( parameter );

connection.Open();
command.ExecuteNonQuery();
int returnValue = parameters[0].Value; //接收函数返回值
connection.Close();
Bill1212 2010-04-12
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 sunyfun 的回复:]

不要用ODBC,用Oracle客户端的using System.Data.OracleClient;我们都是用这个的
[/Quote]

我试了using System.Data.OracleClient; 但提示我的oracle版本太低了。那除了OracleClient还有别的能用吗?


Exception Details: System.Exception: System.Data.OracleClient requires Oracle client software version 8.1.7 or greater.

Source Error:


Line 46: OracleConnection conn = new OracleConnection(source);
Line 47:
Line 48: conn.Open();
Line 49:
Line 50:

sunyfun 2010-04-12
  • 打赏
  • 举报
回复
不要用ODBC,用Oracle客户端的using System.Data.OracleClient;我们都是用这个的

110,538

社区成员

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

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

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