我正在使用oracle的ODBC驱动程序与Oracle服务器进行通信。 我的程序如下。
PROCEDURE USP_ValidateLogin
(
LoginID IN VARCHAR DEFAULT null,
Password IN VARCHAR DEFAULT null,
RCT1 IN OUT GLOBALPKG.RCT1
)
AS
BEGIN
OPEN RCT1 FOR
SELECT
EMP.EMPID,
EMP.EMPNAME,
EMP.DESIGNATION
FROM SYSTEMUSERS LUSR,
EMPLOYEE EMP,
( SELECT *
FROM PRIVILEGELEVEL PLVL
WHERE PLVL.ALLOWEDMENUOPTION = 'mnuDoctorDesk'
) PLVL
WHERE LUSR.USERID = EMP.LOGINID (+)
AND (EMP.DESIGNATION = PLVL.PRIVILEGELEVEL (+))
AND (LUSR.USERID = USP_ValidateLogin.LoginID
AND LUSR.PASSWORD = USP_ValidateLogin.Password);
END;
我的主叫代码写在下面,
private void button1_Click(object sender, EventArgs e)
{
string sqlCon = "Driver={Oracle in OraHome90};Dbq=DRDESK;Uid=scott;Pwd=tiger;";
ConnectionString = sqlCon;
OdbcParameter[] SqlParams = new OdbcParameter[3];
OdbcParameter SqlInputParam = new OdbcParameter();
SqlInputParam = SetParameter("LoginID", OdbcType.VarChar, 50, ParameterDirection.Input, "DRKEETHI");
SqlParams[0] = SqlInputParam;
SqlInputParam = new OdbcParameter();
SqlInputParam = SetParameter("Password", OdbcType.VarChar, 50, ParameterDirection.Input, "123");
SqlParams[1] = SqlInputParam;
SqlInputParam = SetParameter("RCT1", OdbcType.VarChar, 50, ParameterDirection.Output, "123");//new OdbcParameter("RCT1", "");
SqlParams[2] = SqlInputParam;
DataTable dtUserRight = GetDataTableFromProcedure("USP_ValidateLogin", true, SqlParams);
dataGridView1.DataSource = dtUserRight;
}
public static DataTable GetDataTableFromProcedure(string CmdText, bool isParams, OdbcParameter[] sqlParams)
{
OdbcCommand sqlCmd = new OdbcCommand();
SetCommandType(sqlCmd, CommandType.StoredProcedure, GenerateProcedureCallString(CmdText, sqlParams.Length));
if (isParams)
{
AddParamToSQLCmd(sqlCmd, sqlParams);
}
DataTable objDt = new DataTable();
objDt = FillDataTable(sqlCmd);
return objDt;
}
private static DataTable FillDataTable(OdbcCommand sqlCmd)
{
OdbcConnection SqlCon = new OdbcConnection();
DataTable tblResult = new DataTable();
OdbcDataAdapter _OdbcDataAdapter = new OdbcDataAdapter();
SqlCon = OpenConnection();
sqlCmd.Connection = SqlCon;
_OdbcDataAdapter.SelectCommand = sqlCmd;
_OdbcDataAdapter.Fill(tblResult);
return tblResult;
}
但按下按钮时出现此错误。
ERROR [HY000] [Oracle][ODBC][Ora]ORA-06553: PLS-306: wrong number or types of arguments in call to 'USP_VALIDATELOGIN'
at
_OdbcDataAdapter.Fill(tblResult);
我认为此错误是由存储过程的OUT参数的数据类型引起的。 任何人都可以纠正这个吗?
PS:如果我使用
SqlInputParam = new OdbcParameter("RCT1", null);
SqlInputParam.Direction = ParameterDirection.Output;
而不是
SqlInputParam = SetParameter("RCT1", OdbcType.VarChar, 50, ParameterDirection.Output, "123");
SqlParams[2] = SqlInputParam;
我收到错误,
String[3]: the Size property has an invalid size of 0.