Oracle 存储过程不返回任何值
本文关键字:任何值 返回 存储过程 Oracle | 更新日期: 2023-09-27 17:58:10
我正在从 c# 登录表单调用预言机存储过程,但它没有返回任何值。因此dt.rows.count
下面的总是 0,if-else 语句的 if 部分永远不会被执行,它总是到达 else 部分。
C# 代码:
String sConnectionString = "Data Source=XE;User ID=system;Password=system;";
OracleConnection myConnection = new OracleConnection(sConnectionString);
myConnection.Open();
OracleCommand myCommand = new OracleCommand("spValidateDBA", myConnection);
myCommand.CommandType = CommandType.StoredProcedure;
myCommand.CommandText = "spValidateDBA";
myCommand.Parameters.Add("UserName", OracleDbType.Varchar2, 50);
myCommand.Parameters["UserName"].Value = txtUsrId.Text.ToString();
myCommand.Parameters.Add("UserPassword", OracleDbType.Varchar2, 50);
myCommand.Parameters["UserPassword"].Value = txtPassword.Text.ToString();
myCommand.Parameters.Add("DataCount", OracleDbType.Int32, 20).Direction =
ParameterDirection.Output;
OracleDataReader myReader = myCommand.ExecuteReader();
DataTable dt = new DataTable();
dt.Load(myReader);
if (dt.Rows.Count>0)
{
CustomMsgbox.Show("'tLogin Successful't" + Environment.NewLine +
"Welcome to DB Utilities Tool", "DB Utilities Tool", "OK", "Cancel");
DBA dba = new DBA();
dba.Show();
this.Hide();
}
else
CustomMsgbox.Show("Please enter correct Username/password",
"DB Utilities Tool", "OK", "Cancel");
myConnection.Close();
}
甲骨文存储过程:
create or replace PROCEDURE spValidateDBA(
UserName IN VARCHAR2,
UserPassword IN VARCHAR2,
DataCount OUT INTEGER)
AS
BEGIN
select count(*) into DataCount from DBA_USER where USER_NAME=UserName and
USER_PWD=UserPassword and USER_ROLE = 'DBA';
END spValidateDBA;
请注意,表 DBA_USER 当前包含 1 行,其值为:
USER_NAME USER_PWD USER_ROLE
dask password DBA
因此,当登录表单的输入是dask(用户名(和password(userpassword(时,上述存储过程中的DataCount
应该返回1行,值为1,但是它不返回任何内容。
有人可以告诉我我哪里出了问题吗?我真的需要尽快解决这个问题。
您不会从 SP 返回任何结果集,因此数据表将始终为空。您将在输出参数中返回值。使用ExecuteNonQuery
,然后从参数读取值。
试试这个
myCommand.ExecuteNonQuery();
int dataCount = 0;
if(myCommand.Parameters["DataCount"] ! =null)
{
dataCount = Convert.ToInt32(myCommand.Parameters["DataCount"].Value);
}
if(dataCount > 0)
{
CustomMsgbox.Show("...");
}