写了个最简单的存储过程,就是按照地区从学生表里取出学号和姓名,如下:
create or replace PROCEDURE SP_SelectStudentByDq (dq_id IN VARCHAR2, CUR OUT SELECT_PACKAGE.RET_CUR)
AS
BEGIN
OPEN CUR FOR
select code, name from students where dq = dq_id;
END;
然后客户端C#调用
OracleCommand cmdToExecute = new OracleCommand();
cmdToExecute.CommandText = "SP_SelectStudentByDq";
cmdToExecute.CommandType = CommandType.StoredProcedure;
cmdToExecute.Connection = _mainConnection;
DataTable retTable = new DataTable();
OracleDataAdapter oAdapter = new OracleDataAdapter(cmdToExecute);
cmdToExecute.Parameters.Add(new OracleParameter("dq_id", OracleType.VarChar, 20, ParameterDirection.Input, false, 0, 0, "", DataRowVersion.Proposed, _dq));
cmdToExecute.Parameters.Add(new OracleParameter("CUR", OracleType.Cursor, 0, ParameterDirection.Output, false, 0, 0, "", DataRowVersion.Proposed, 0));
_mainConnection.Open();
oAdapter.Fill(retTable);
return retTable;
_mainConnection.Close();
传入地区参数,比如"11000000"(北京)、"21000000"(辽宁)怎么都取不出来值。
但是在存储过程里面写死:select code, name from students where dq = ‘21000000';马上就取出数据了。
或者,将存储过程修改为:select code, name from students where dq like dq_id;
传入"21000000%"或"11000000%"等也能对。