在ASP.NET中添加Session后,数据库未上载

时间:2018-04-26 18:10:16

标签: c# asp.net session

在我的网站项目中,我创建了一个注册表和登录表单,然后将其连接到数据库。插入工作正常。现在我添加了会话来存储注册数据,但是没有插入数据。除此之外,我也没有对代码进行任何更改,如果有会话我在哪里进行了更改。一旦它说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 :(得分:1)

我认为这里的问题是你使用与“insert”命令相同的SqlCommand来填充数据适配器(你不需要更改命令)。

您可以通过以下三种方式解决:

第一个:将SqlCommand更改为SELECT子句,其中包含在创建DataAdapter之前填充会话所需的信息。

第二个:只需使用以下表单数据填充会话:

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

当然,如果插入失败,您应该处理错误。

第三个:使用存储过程,这样您就可以在同一查询中使用select插入和填充数据适配器。

恕我直言,我更喜欢选项2或3。

此外,我认为您必须考虑更好的异常处理(并非所有可能发生的错误都是因为电子邮件已在使用中),您应该考虑使用“使用”语句(https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/using-statement )用于处理/关闭对象(SqlCommand和SqlDataAdapter)。

希望这有帮助。