我创建了Procedure并将其添加到Load页面,我的代码现在看起来像这样:
步骤:
CREATE PROCEDURE CheckIfUserExists
(
@UserName Varchar(50),
@IsExists INT OUTPUT
)
AS
If exists (select Nazwa_uzytkownika from Uzytkownicy where Nazwa_uzytkownika = @UserName)
Begin
Set @IsExists = 1
End
Else
begin
Set @IsExists = 0
End
Return @IsExists
代码:
namespace Komis_Samochodowy1
{
public partial class Rejestracja : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["registrationConn"].ConnectionString);
conn.Open();
SqlCommand cmd = new SqlCommand("CheckIfUserExists", conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@UserName", un.Text);
**int rowAffected = cmd.ExecuteNonQuery();** //Error
if (rowAffected == 1)
{
status.Visible = true;
status.Text = "Uzytkownik istnieje.";
}
}
protected void Button4_Click(object sender, EventArgs e)
{
Response.Redirect("Login.aspx");
}
protected void Button1_Click(object sender, EventArgs e)
{
Response.Redirect("Main.aspx");
}
protected void Button3_Click(object sender, EventArgs e)
{
Response.Redirect("AboutMe.aspx");
}
protected void Button2_Click(object sender, EventArgs e)
{
Response.Redirect("Offer.aspx");
}
protected void Button5_Click(object sender, EventArgs e)
{
Response.Redirect("Registration.aspx");
}
protected void Button7_Click(object sender, EventArgs e)
{
SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["registrationConn"].ConnectionString);
conn.Open();
string dodajQuery = "insert into Uzytkownicy (Nazwa_uzytkownika, Kraj, Hasło, Email) values (@Unazwa, @ukraj, @uhasło, @uemail) ";
SqlCommand com = new SqlCommand(dodajQuery, conn);
com.Parameters.AddWithValue("@Unazwa", un.Text.ToString());
com.Parameters.AddWithValue("@ukraj", country.SelectedItem.ToString());
com.Parameters.AddWithValue("@uhasło", pass.Text.ToString());
com.Parameters.AddWithValue("@uemail", email.Text.ToString());
com.ExecuteNonQuery();
Response.Redirect("Login.aspx");
Response.Write("Rejestracja zakonczona.");
conn.Close();
}
}
}
仍然根本不起作用,每次都用螺栓固定部分粉碎,我做错了什么?
附加信息:过程或函数'CheckIfUserExists'需要参数'@IsExists',这是未提供的。
答案 0 :(得分:1)
cmd.Parameters.AddWithValue("@UserName", un.Text);
var outparam = new SqlParameter("@IsExist", SqlDbType.Int);
outparam.Direction = ParameterDirection.Output;
cmd.Parameters.Add(outparam);
int rowAffected = cmd.ExecuteNonQuery();
if ((int)outparam.Value == 1)
{
// user exists
}
else
{
// user does not exist
}
答案 1 :(得分:0)
该消息告诉您问题。您需要添加一个名为IsExists
的参数,.Direction
设置为ParameterDirection.Output
或ParameterDirection.InputOutput
,然后检查之后的.Value
} strong>你已经执行了命令。作为旁注,您还可以检查返回值,但是仍然需要添加名为IsExists
的参数,单独添加带方向的参数ReturnValue
,这实际上可以带来更多的工作。
很多更容易使用select
结果的sql方法,而不是return
结果或使用output
参数。然后你可以使用ExecuteScalar
。
请注意,ExecuteNonQuery
的返回值不与查询的返回值相同。是的,这听起来很奇怪。
cmd.Parameters.AddWithValue("UserName", un.Text);
var isExists = cmd.Parameters.Add("IsExists", SqlDbType.Int);
isExists.Value = DBNull.Value;
isExists.Direction = ParameterDirection.InputOutput;
cmd.ExecuteNonQuery();
bool exists = (int)isExists.Value == 1;
答案 2 :(得分:0)
你需要添加缺少的输出参数和方向,请尝试这样做。我没有检查语法:
cmd.Parameters.Add("@IsExists", SqlDbType.bool);
cmd.Parameters["@IsExists"].Direction = ParameterDirection.Output;