В моей хранимой процедуре есть несколько 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
игнорируются.
Однако первый оператор процедуры else, если он немного странный, на стороне базы данных работает нормально, он корректно проверяет условия перед вставкой значений.
Но case 0
не работает, вместо этого запускается case -2
.
Переменные: @Username = имя пользователя @b = имя события
столбец зарегистрированных пользователей: имя пользователя, имя события
Я проверяю, существует ли пользователь в таблице registeredusers
и нетне существует в registered
, следовательно, 2 оператора if вместе.