Asp.Net 我无法填写 DataTable /// 或 \\\ 我的程序 (oracle) 不工作
Asp.Net I cant fill the DataTable ///OR\\\ My Procedure (oracle) doesnt work
我写了一个登录程序,它从 asp Login.aspx 获取参数。我还有一个发送参数和获取结果的功能。我想我可以发送参数但是当数据表填充时,抛出错误。我在 C# 方面尝试了一些东西,但我无法理解。 PS:I不确定我是否执行了程序。不过程序似乎是对的。
public bool RunLoginProcedure(string E_mail, string PassWord)
{
OracleConnection connect = myconnection();
OracleCommand command = new OracleCommand();
OracleDataAdapter adapter;
DataTable table = new DataTable();
command.Connection = connect;
//OracleParameter[] parameters = new OracleParameter[]
//{
// new OracleParameter("@EMail",E_mail),
// new OracleParameter("@UserPassword",PassWord)
//};
//command.Parameters.Add(parameters);
command.Parameters.Add(new OracleParameter("EMail", OracleDbType.NVarchar2));
command.Parameters.Add(new OracleParameter("UserPassword", OracleDbType.NVarchar2));
command.Parameters["EMail"].Value = E_mail;
command.Parameters["EMail"].Direction = ParameterDirection.Input;
command.Parameters["UserPassword"].Value = PassWord;
command.Parameters["UserPassword"].Direction = ParameterDirection.Input;
command.CommandText = "Procedure_Login";
command.CommandType = CommandType.StoredProcedure;
//command.ExecuteNonQuery(); //here
command.ExecuteNonQueryAsync();
adapter = new OracleDataAdapter(command);
adapter.Fill(table);
bool value;
if (table.Rows.Count != 0)
{
value = true;
}
else value = false;
connect.Close();
connect.Dispose();
return value;
}
这是我的程序
create or replace procedure Procedure_Login
(
EMail IN USERS.E_MAIL%TYPE,
UserPassword IN USERS.USERPASSWORD%TYPE,
id OUT VARCHAR2,
firstname OUT VARCHAR2,
lastname OUT VARCHAR2
) is
begin
SELECT USER_ID,FIRSTNAME,LASTNAME
INTO id,firstname,lastname
FROM USERS
WHERE E_MAIL=EMail AND USERPASSWORD=UserPassword;
end Procedure_Login;
And here is the error:
enter image description here
Edit:view error more specificenter image description here
这里没有解决方案,所以想告诉你我做了什么。我无法执行我的程序(我认为这是因为我与 oracle-plql 不相似)所以我决定放弃使用程序。我在 c# 中使用了 OracleCommand,并在命令中做了同样的工作。 (这更容易,我知道,我只是想学习用 c# 执行程序)所以现在可以用了。我仍然不知道如何在 C# 中执行 运行 过程,我认为我迟早需要学习它。所以如果有人能解决这个问题那就太好了。祝你有美好的一天
只是您正在调用一个需要五个参数(2:输入,3:输出)的存储过程,但您只传递了 2 个输入参数..
create or replace procedure Procedure_Login
(
EMail IN USERS.E_MAIL%TYPE,
UserPassword IN USERS.USERPASSWORD%TYPE,
id OUT VARCHAR2, <--- miss in your calling code!
firstname OUT VARCHAR2, <--- miss in your calling code!
lastname OUT VARCHAR2 <--- miss in your calling code!
) is
begin
...
end Procedure_Login;
您应该在 command.ExecuteNonQuery
或 .ExecuteNonQueryAsync()
这些行之前添加您的代码...
command.Parameters.Add(new OracleParameter("Id", OracleDbType.NVarchar2));
command.Parameters.Add(new OracleParameter("firstname", OracleDbType.NVarchar2));
command.Parameters.Add(new OracleParameter("lastname", OracleDbType.NVarchar2));
command.Parameters["Id"].Direction = ParameterDirection.Output;
command.Parameters["firstname"].Direction = ParameterDirection.Output;
command.Parameters["lastname"].Direction = ParameterDirection.Output;
我写了一个登录程序,它从 asp Login.aspx 获取参数。我还有一个发送参数和获取结果的功能。我想我可以发送参数但是当数据表填充时,抛出错误。我在 C# 方面尝试了一些东西,但我无法理解。 PS:I不确定我是否执行了程序。不过程序似乎是对的。
public bool RunLoginProcedure(string E_mail, string PassWord)
{
OracleConnection connect = myconnection();
OracleCommand command = new OracleCommand();
OracleDataAdapter adapter;
DataTable table = new DataTable();
command.Connection = connect;
//OracleParameter[] parameters = new OracleParameter[]
//{
// new OracleParameter("@EMail",E_mail),
// new OracleParameter("@UserPassword",PassWord)
//};
//command.Parameters.Add(parameters);
command.Parameters.Add(new OracleParameter("EMail", OracleDbType.NVarchar2));
command.Parameters.Add(new OracleParameter("UserPassword", OracleDbType.NVarchar2));
command.Parameters["EMail"].Value = E_mail;
command.Parameters["EMail"].Direction = ParameterDirection.Input;
command.Parameters["UserPassword"].Value = PassWord;
command.Parameters["UserPassword"].Direction = ParameterDirection.Input;
command.CommandText = "Procedure_Login";
command.CommandType = CommandType.StoredProcedure;
//command.ExecuteNonQuery(); //here
command.ExecuteNonQueryAsync();
adapter = new OracleDataAdapter(command);
adapter.Fill(table);
bool value;
if (table.Rows.Count != 0)
{
value = true;
}
else value = false;
connect.Close();
connect.Dispose();
return value;
}
这是我的程序
create or replace procedure Procedure_Login
(
EMail IN USERS.E_MAIL%TYPE,
UserPassword IN USERS.USERPASSWORD%TYPE,
id OUT VARCHAR2,
firstname OUT VARCHAR2,
lastname OUT VARCHAR2
) is
begin
SELECT USER_ID,FIRSTNAME,LASTNAME
INTO id,firstname,lastname
FROM USERS
WHERE E_MAIL=EMail AND USERPASSWORD=UserPassword;
end Procedure_Login;
And here is the error: enter image description here Edit:view error more specificenter image description here
这里没有解决方案,所以想告诉你我做了什么。我无法执行我的程序(我认为这是因为我与 oracle-plql 不相似)所以我决定放弃使用程序。我在 c# 中使用了 OracleCommand,并在命令中做了同样的工作。 (这更容易,我知道,我只是想学习用 c# 执行程序)所以现在可以用了。我仍然不知道如何在 C# 中执行 运行 过程,我认为我迟早需要学习它。所以如果有人能解决这个问题那就太好了。祝你有美好的一天
只是您正在调用一个需要五个参数(2:输入,3:输出)的存储过程,但您只传递了 2 个输入参数..
create or replace procedure Procedure_Login
(
EMail IN USERS.E_MAIL%TYPE,
UserPassword IN USERS.USERPASSWORD%TYPE,
id OUT VARCHAR2, <--- miss in your calling code!
firstname OUT VARCHAR2, <--- miss in your calling code!
lastname OUT VARCHAR2 <--- miss in your calling code!
) is
begin
...
end Procedure_Login;
您应该在 command.ExecuteNonQuery
或 .ExecuteNonQueryAsync()
这些行之前添加您的代码...
command.Parameters.Add(new OracleParameter("Id", OracleDbType.NVarchar2));
command.Parameters.Add(new OracleParameter("firstname", OracleDbType.NVarchar2));
command.Parameters.Add(new OracleParameter("lastname", OracleDbType.NVarchar2));
command.Parameters["Id"].Direction = ParameterDirection.Output;
command.Parameters["firstname"].Direction = ParameterDirection.Output;
command.Parameters["lastname"].Direction = ParameterDirection.Output;