ASP.NET项目点击注册按钮后数据未存入SQL Server数据库求助
问题修复方案
1. 首要修复:数据库连接字符串拼写错误
你web.config里的Integrated Security被误写为Integerated,多了一个字母e,这会直接导致数据库连接失败,是数据无法写入的核心原因。
修复后的连接字符串配置:
<add name="con" connectionString="Data Source=PROBOOK-HP\SQLEXPRESS;Initial Catalog=ebookDB;Integrated Security=true" />
2. 修复checkMemberExists方法逻辑漏洞
该方法中con.Close()和提示代码写在了return语句之后,永远不会执行,同时存在SQL注入风险、数据库连接资源未主动释放的问题。
优化后的代码:
bool checkMemberExists() { try { using (SqlConnection con = new SqlConnection(strcon)) { if (con.State == ConnectionState.Closed) { con.Open(); } // 改用参数化查询避免SQL注入风险 SqlCommand cmd = new SqlCommand("SELECT * FROM member_master_tabel WHERE member_id=@memberId", con); cmd.Parameters.AddWithValue("@memberId", TextBox8.Text.Trim()); SqlDataAdapter da = new SqlDataAdapter(cmd); DataTable dt = new DataTable(); da.Fill(dt); return dt.Rows.Count >= 1; } } catch (Exception ex) { Response.Write("<script>alert('" + ex.Message + "');</script>"); return false; } }
3. 日期格式适配修复
SQL Server的date/datetime类型字段和字符串格式可能存在不兼容,建议将生日参数转为DateTime类型后再传入,将signUpNewMember方法中对应的参数代码修改为:
cmd.Parameters.AddWithValue("@dob", DateTime.Parse(TextBox2.Text.Trim()));
可额外增加日期合法性校验,避免用户输入非法格式触发报错。
4. 资源释放优化
所有数据库操作相关对象建议套上using语句,无需手动调用Close即可自动释放资源,避免数据库连接泄漏,优化后的signUpNewMember方法:
void signUpNewMember() { try { using (SqlConnection con = new SqlConnection(strcon)) { if (con.State == ConnectionState.Closed) { con.Open(); } SqlCommand cmd = new SqlCommand("INSERT INTO member_master_tabel(full_name,dob,contact_no,email,state,city,pincode,full_address,member_id,password,account_status)" + "VALUES(@full_name,@dob,@contact_no,@email,@state,@city,@pincode,@full_address,@member_id,@password,@account_status)", con); cmd.Parameters.AddWithValue("@full_name", TextBox1.Text.Trim()); cmd.Parameters.AddWithValue("@dob", DateTime.Parse(TextBox2.Text.Trim())); cmd.Parameters.AddWithValue("@contact_no", TextBox3.Text.Trim()); cmd.Parameters.AddWithValue("@email", TextBox4.Text.Trim()); cmd.Parameters.AddWithValue("@state", DropDownList1.SelectedItem.Value); cmd.Parameters.AddWithValue("@city", TextBox6.Text.Trim()); cmd.Parameters.AddWithValue("@pincode", TextBox7.Text.Trim()); cmd.Parameters.AddWithValue("@full_address", TextBox5.Text.Trim()); cmd.Parameters.AddWithValue("@member_id", TextBox8.Text.Trim()); cmd.Parameters.AddWithValue("@password", TextBox9.Text.Trim()); cmd.Parameters.AddWithValue("@account_status", "pending"); cmd.ExecuteNonQuery(); } Response.Write("<script>alert('注册成功,请前往登录页。');</script>"); } catch (Exception ex) { Response.Write("<script>alert('" + ex.Message + "');</script>"); } }
其他排查注意事项
- 确认数据库表名
member_master_tabel拼写正确,不少场景下会将table误写为tabel - 确认表字段的类型、长度和传入内容匹配,例如手机号如果用
int类型存储会因超出最大值报错,建议改为varchar类型 - 增加表单校验逻辑,避免用户选择下拉框默认的
Select选项就提交 - 生产环境不要明文存储密码,需使用加盐哈希算法加密后再存入数据库
内容的提问来源于stack exchange,提问作者L PATEL
相关产品推荐
相关产品推荐

