从文本框向SQL Server插数据遇Msg2809错误,求原因
错误原因及修复方案
核心错误原因
你遇到的Msg 2809错误,本质是INSERT语句存在语法错误,导致SQL Server无法正确解析插入逻辑,误将目标表member_master_tbl识别为存储过程进行调用,从而抛出该错误。
具体问题点
你的代码里存在两处致命SQL语法错误:
- 括号不匹配:INSERT语句末尾缺少闭合的右括号,整个语句结构不完整
- 参数名遗漏前缀:VALUES子句里的
dob未添加参数前缀@,正确写法应为@dob
此外还有一处逻辑错误:
- 参数绑定错误:
@contact_no参数错误绑定到了输入生日的TextBox2.Text,应绑定到联系电话对应的文本框(比如TextBox3.Text,需根据你的页面控件实际情况调整)
修复后的完整代码
using System; using System.Collections.Generic; using System.Configuration; using System.Data; using System.Data.SqlClient; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; namespace Elibrary_management2 { public partial class user_registration : System.Web.UI.Page { string strcon = ConfigurationManager.ConnectionStrings["con"].ConnectionString; protected void Page_Load(object sender, EventArgs e) { } // Signup button click protected void Button1_Click(object sender, EventArgs e) { try { using (SqlConnection con = new SqlConnection(strcon)) { if (con.State == ConnectionState.Closed) { con.Open(); } // 修正SQL语句的括号和参数名 string sqlquery = "insert into member_master_tbl(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)"; SqlCommand cmd = new SqlCommand(sqlquery, con); cmd.Parameters.AddWithValue("@full_name", TextBox1.Text.Trim()); cmd.Parameters.AddWithValue("@dob", 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", TextBox8.Text.Trim()); cmd.Parameters.AddWithValue("@member_id", TextBox9.Text.Trim()); cmd.Parameters.AddWithValue("@password", TextBox5.Text.Trim()); cmd.Parameters.AddWithValue("@account_status", "pending"); cmd.ExecuteNonQuery(); Response.Write("<script>alert('Signup Successfull');</script>"); } } catch(Exception ex) { Response.Write("<script>alert('" + ex.Message + "')</script>"); } } } }
注:代码中新增using语句自动释放数据库连接,避免资源泄漏,这是更规范的资源管理写法。
内容的提问来源于stack exchange,提问作者Narendranath Murmu
相关产品推荐
相关产品推荐

