База данных не загружается после добавления сеанса в ASP.NET - PullRequest
0 голосов
/ 26 апреля 2018

В своем проекте веб-сайта я создал форму регистрации и входа в систему, а затем подключил ее к базе данных. Прошивка работала. Теперь я добавил сеанс для хранения данных регистрации, но данные не вставляются. В дополнение к этому, я не получаю никаких изменений в кодах, где я внес изменения, если есть сеанс. Когда-то сообщалось, что localhost отказывается подключаться, но теперь браузер не выдает никакой ошибки, подобной этой. Может кто-нибудь помочь мне выяснить, где проблема в моем коде?

Мой код C #:

 protected void userRegister(object sender, EventArgs e)
 {
     string constr = ConfigurationManager.ConnectionStrings["Khulna_website"].ConnectionString;
     string encoded_pass = encrypt_pass(Regi_Password.Text);
     using(SqlConnection connection = new SqlConnection(constr))         
     {
         string insertQuery = "insert into dbo.users(user_f_name,user_l_name,user_password,user_email,user_age, user_gender) values (@First_Name, @Last_Name, @Regi_Password, @Regi_Email, @Age, @Gender);";
         SqlCommand com = new SqlCommand(insertQuery, connection);
         connection.Open();
         com.Parameters.AddWithValue("@First_Name", First_Name.Text);
         com.Parameters.AddWithValue("@Last_Name", Last_Name.Text);
         com.Parameters.AddWithValue("@Regi_Password", encoded_pass);
         com.Parameters.AddWithValue("@Regi_Email", Regi_Email.Text);
         com.Parameters.AddWithValue("@Age", Age.Text);
         com.Parameters.AddWithValue("@Gender", Gender.SelectedValue);
         try
         {
             com.ExecuteNonQuery();
             com.CommandText = "Select * from dbo.users where email = " + Regi_Email.Text;
             SqlDataAdapter da = new SqlDataAdapter(com);
             DataTable dt = new DataTable();
             da.Fill(dt);
             Session["User"]=dt.Rows[0]["user_f_name"];
             Response.Redirect("default.aspx");
             loginlabel.Text="Welcome, "+Session["User"];
             connection.Close();
         }
         catch
         {
             Label1.Text = "Registration Error!";
         }
     } 

HTML-код:

    <form runat="server" method="post">
    <div class="header">
    <img id="icon" src="Images/logo.png">
        <form>
            <input type="text" id="search" placeholder="Search for people, place, locations">
            <input type="submit" id="search_button" value="">           
        </form>
        <span id= "login" runat="server" onclick="login();"><asp:Label ID="loginlabel" Text="" runat="server"></asp:Label></span>
    </div>
<div>
    <asp:ContentPlaceHolder id="Body" runat="server">

    </asp:ContentPlaceHolder>
</div>


        <div id="Sign_Up_Form" style="display: none">
            <form class="modal-content animate">           
            <div class="input">
                <div>
                    <div>Name</div>
                    <asp:TextBox CssClass="signUp_input" ID="First_Name" runat="server" placeholder="First Name" style="height: 20px; padding-left: 1px;"></asp:TextBox>
                    <asp:TextBox CssClass="signUp_input" ID="Last_Name" runat="server" placeholder="Last Name" style="height: 20px; padding-left: 1px;"></asp:TextBox>
                </div>
                <div>
                    <div>Email</div>
                    <asp:TextBox CssClass="signUp_input" ID="Regi_Email" runat="server" placeholder="Your email here"  style="height: 20px; width:90%; padding-left: 1px;"></asp:TextBox>
                </div>
                <div>
                    <div>Password</div>
                    <asp:TextBox CssClass="signUp_input" ID="Regi_Password" type="password" runat="server" placeholder="**********" style="height: 20px;  width: 90%; padding-left: 1px;"></asp:TextBox>
                </div>
                <div>
                    <div>Confirm Password</div>
                    <asp:TextBox CssClass="signUp_input" ID="Confirm_Regi_Password" type="password" runat="server" placeholder="**********" style="height: 20px;  width: 90%; padding-left: 1px;"></asp:TextBox>
                </div>
                <div>
                    <div>Birth Date</div>
                    <asp:TextBox CssClass="signUp_input" ID="Age" type="number" runat="server" placeholder="dd/mm/yyyy" style="height: 20px;  width: 90%; padding-left: 1px;"></asp:TextBox>
                </div>
                <div>
                    <div>Gender</div>
                    <asp:RadioButtonList CssClass="radio" ID="Gender" runat="server">
                        <asp:ListItem CssClass="radio" Value="1">Male</asp:ListItem>
                        <asp:ListItem CssClass="radio" Value="2">Female</asp:ListItem>
                        <asp:ListItem CssClass="radio" Value="3">Other</asp:ListItem>
                    </asp:RadioButtonList>
                    </br>
                </div>
           </div>
           <asp:Button ID="Register_Button" runat="server" value="Join" OnClick="userRegister" CssClass="button_join" Text="Join" />
         <asp:Label ID="Label1" CssClass="label" runat="server" Text=""></asp:Label>
           </form>

1 Ответ

0 голосов
/ 26 апреля 2018

Я думаю, что проблема здесь в том, что вы используете тот же SqlCommand, что и у вас с командой "insert", для заполнения адаптера данных (вы не меняете команду).

Вы можете решить это тремя способами:

Первый: измените SqlCommand на предложение SELECT с информацией, необходимой для заполнения сеанса непосредственно перед созданием адаптера данных.

Второй: просто заполните сеанс данными формы, такими как:

Session["user"] = Regi_Email.Text;
Session["user_name"] = First_Name.Text;

Конечно, вы должны обработать ошибки, если вставка не удалась.

Третий: используйте хранимую процедуру, чтобы вы могли вставить и заполнить адаптер данных с помощью выбора в том же запросе.

ИМХО, я бы предпочел вариант 2 или 3.

Кроме того, я думаю, вам следует рассмотреть возможность лучшей обработки исключений (не все ошибки, которые на самом деле могут произойти, потому что электронная почта уже используется), и вам следует рассмотреть возможность использования оператора using (* 1017). * для удаления / закрытия объектов (SqlCommand и SqlDataAdapter).

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...