C#和Oracle之间的参数类型无效

时间:2011-05-25 06:18:55

标签: c# oracle

我在Oracle中有一个返回序列号的函数。当我尝试通过参数在C#中获取该值时,它总是告诉我参数类型无效。返回值的示例值是115545.如果确实此错误是正确的,那么ODBCType中该对应的值是什么?如果不正确那么问题是什么?

Oracle功能是:

FUNCTION Get_Next_Message_Id__ 
RETURN NUMBER IS

  temp_ NUMBER;
  CURSOR get_in_message_id_seq IS
    SELECT in_message_id_seq.NEXTVAL
      FROM dual;

BEGIN

   General_SYS.Init_Method(lu_name_, 'IN_MESSAGE_API', 'Get_Next_Message_Id__', TRUE);

   OPEN get_in_message_id_seq;
   FETCH get_in_message_id_seq INTO temp_;
   CLOSE  get_in_message_id_seq;

   RETURN(temp_);

END Get_Next_Message_Id__;

C#代码:

OdbcConnection myConnection = new OdbcConnection(ODBC_CLass.ifsconnectionstring);
OdbcParameter next_id = new OdbcParameter();
next_id.Direction = ParameterDirection.Output;

myConnection.Open();
OdbcCommand command = new OdbcCommand("{? = call ifsapp.in_message_api.Get_Next_Message_Id__}", myConnection);
command.CommandType = CommandType.StoredProcedure;
next_id = command.Parameters.Add("temp_", OdbcType.Int);
int k = command.ExecuteNonQuery();
MessageBox.Show("next_id: " + next_id.Value);

1 个答案:

答案 0 :(得分:1)

我认为问题在于你设置next_id的方式。您首先创建一个OdbcParameter并设置其方向 - 然后完全忽略它,并使用Add方法重新分配变量,这将创建一个“in”参数默认。试试这个:

OdbcParameter nextId = command.Parameters.Add("temp_", OdbcType.Int);
nextId.Direction = ParameterDirection.Output;

请注意,您还应该对连接和命令使用using语句,以确保在代码结束时清除它们,无论发生什么。