我的存储过程中有多个IF...ELSE
语句,但是一次只能使用2条吗?
存储过程:
IF EXISTS(SELECT userid FROM registeredusers WHERE Username = @Username)
IF NOT EXISTS(SELECT userid FROM registered WHERE Username = @Username and eventname = @b)
BEGIN
select 0
INSERT INTO [registered]
([Username]
,[CreatedDate]
,[eventname])
VALUES
(@Username
,GETDATE()
,@b)
END
ELSE IF NOT EXISTS(SELECT userid FROM registeredusers WHERE Username = @Username)
BEGIN
SELECT -1 -- invalid user
END
ELSE IF EXISTS(SELECT userid FROM registered WHERE Username = @Username and eventname = @b)
BEGIN
SELECT -2 -- username
END
具有3个不同消息(使用切换例)的帖子前页(仅使用-2
和0
,-1
被完全忽略)。
如果用户不存在,它将不会选择-1
。
即使它不正确,它也将使用会话值转到页面上方。
protected void RegisterUser(object sender, EventArgs e)
{
int userId = 0;
string constr = ConfigurationManager.ConnectionStrings["constr"].ConnectionString;
using (SqlConnection con = new SqlConnection(constr))
{
using (SqlCommand cmd = new SqlCommand("Insert_User"))
{
using (SqlDataAdapter sda = new SqlDataAdapter())
{
cmd.Connection = con;
con.Open();
Session["username"] = txtUsername.Text;
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@Username", txtUsername.Text.Trim());
cmd.Parameters.AddWithValue("@b", DropDownList1.SelectedValue.ToString());
if (!DBNull.Value.Equals(cmd.ExecuteScalar()))
{
userId = Convert.ToInt32(cmd.ExecuteScalar());
}
}
string messages = string.Empty;
switch (userId)
{
case 0:
Response.Redirect("userinfo.aspx", false);
break;
Label2.Text = Convert.ToString(userId);
case -1:
messages = "invalid user";
Label2.Text = Convert.ToString(userId);
break;
case -2:
messages = "You've already registered!";
Label2.Text = Convert.ToString(userId);
//Label2.Text = messages;
break;
}
}
}
}
发布页面的代码后面
protected void Page_Load(object sender, EventArgs e)
{
Label1.Text = Convert.ToString(Session["username"]);
string constr = ConfigurationManager.ConnectionStrings["constr"].ConnectionString;
using (SqlConnection con = new SqlConnection(constr))
using (SqlCommand scmd = new SqlCommand())
{
using (SqlDataAdapter sda = new SqlDataAdapter())
{
scmd.Connection = con;
scmd.CommandType = CommandType.Text;
scmd.Parameters.Add("@b", SqlDbType.NVarChar).Value = Label1.Text;
scmd.CommandText = "SELECT * FROM registered where username = @b";
con.Open();
}
}
}
回复布伦丹:
select --1 invalid user
未被执行,而是被发布到下一页,这意味着case -1
被忽略。
但是,该过程的第一个if else语句有点奇怪,在数据库方面,它运行良好,可以正确地在插入值之前检查条件。
但是case 0
不起作用,它会触发case -2
。
变量: @Username =用户名 @b =事件名称
“注册用户”列:用户名,事件名
我正在检查registeredusers
表中是否存在用户,而registered
中不存在用户,因此将2条if语句放在一起。
答案 0 :(得分:3)
(仅使用-2和0,完全忽略-1)。如果用户不存在,则不会选择-1。原因是第一个语句,即:
IF EXISTS(SELECT userid FROM registeredusers WHERE Username = @Username)
在其中检查条件是否存在,然后继续。如果用户不存在,它将如何进入其他语句。您可以为此编写一个其他部分
IF EXISTS(SELECT userid FROM registeredusers WHERE Username = @Username)
BEGIN
IF NOT EXISTS(SELECT userid FROM registered WHERE Username = @Username and eventname = @b)
BEGIN
INSERT INTO [registered]
([Username]
,[CreatedDate]
,[eventname])
VALUES
(@Username
,GETDATE()
,@b)
select 0
END
ELSE IF EXISTS(SELECT userid FROM registered WHERE Username = @Username and eventname = @b)
BEGIN
SELECT -2 -- username
END
END
ELSE
BEGIN
SELECT -1 -- invalid user
END