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