我有这个存储过程
create or replace procedure get_login(p_username in varchar2)
is
begin
select USERPASSWORD
from LOGIN
where USERNAME = p_username;
end;
我尝试使用此
在C#中调用它public string login(string username)
{
try
{
conn.Open();
OracleCommand cmd = new OracleCommand("get_login",conn);
cmd.CommandType = CommandType.StoredProcedure;
OracleParameter obja = new OracleParameter("P_USERNAME", OracleDbType.Varchar2, ParameterDirection.Input);
obja.Value = username;
obja.UdtTypeName = "varchar2";
// OracleParameter objb = new OracleParameter("P_USERPASSWORD", OracleDbType.Varchar2, ParameterDirection.Output);
cmd.Parameters.Add(obja);
Login = cmd.ExecuteScalar().ToString();
}
catch(Exception ex)
{
throw ex;
}
finally
{
conn.Close();
}
return Login;
}
但是当我运行它时我得到了这个错误:
ORA-06550:Regel 1,kolom 7:
PLS-00306:调用'GET_LOGIN'时参数的数量或类型错误。
ORA-06550:Regel 1,kolom 7:
PL / SQL:语句被忽略。
System.Exception {Oracle.DataAccess.Client.OracleException}
我不确定我在这里做错了什么。它可能是程序,但在数据库中测试工作。我可能做错了什么,我不知道是什么。
另外,如果我可以问obja.UdtTypeName
是什么意思?我跟着一个朋友的例子,所以我不太确定。
编辑:
public DBConnect()
{
conn = new OracleConnection();
String pcn = "login";
String pw = "pass";
conn.ConnectionString = "User Id=" + pcn + ";Password=" + pw + ";Data Source=" + "//ipofdatabase" + ";";
}
EDIT2:
create or replace
procedure get_login(p_username in varchar2)
is
begin
select USERPASSWORD from LOGIN where USERNAME = p_username;
end;
当我这样做时,我收到此错误: 错误(4,1):PLS-00428:此SELECT语句中需要INTO子句
答案 0 :(得分:3)
您只添加了1个参数:
OracleParameter objb = new OracleParameter("P_USERPASSWORD", OracleDbType.Varchar2, ParameterDirection.Output);
cmd.Parameters.Add(obja);
应该是:
OracleParameter objb = new OracleParameter("P_USERPASSWORD", OracleDbType.Varchar2, ParameterDirection.Output);
cmd.Parameters.Add(obja);
objb.Size = 255;
cmd.Parameters.Add(objb);
要获取值,请更改:
Login = cmd.ExecuteScalar().ToString();
对此:
cmd.ExecuteNonQuery();
Login = objb.Value.ToString();