ASP.NET插入数据报错:CheckBox无对应托管提供程序原生类型映射
解决ASP.NET插入数据时的"No mapping exists from object type System.Web.UI.WebControls.CheckBox"错误
错误原因
这个错误是因为向SQL参数传递了CheckBox控件对象本身,而非控件的Checked属性值(布尔类型),或者数据库字段类型与传递的值不匹配。
解决步骤
确认参数传递的是Checked属性:
检查代码中是否误传了cb_new(控件对象),确保传递的是cb_new.Checked(布尔值)。你的代码写法是对的,但可以再核对拼写和语法。匹配数据库字段类型:
确保数据库表tbl_employee_information的[new]字段是布尔型(比如SQL Server的bit类型)。如果字段是数值或字符串类型,需要转换布尔值:-- 若字段是int类型,用1/0代替布尔值 cmd.Parameters.AddWithValue("@new", If(cb_new.Checked, 1, 0))推荐显式指定参数类型(避免隐式转换问题):
比起AddWithValue,显式指定参数类型更安全,能避免类型匹配错误:cmd.Parameters.Add("@new", SqlDbType.Bit).Value = cb_new.Checked
修正后的完整代码
Using con As New SqlConnection(constr) con.Open() Using cmd As New SqlCommand("INSERT INTO tbl_employee_information([emp_firstname],[emp_mname],[emp_lastname],[new]) VALUES(@emp_firstname,@emp_mname,@emp_lastname,@new)", con) cmd.Parameters.AddWithValue("@emp_firstname", tb_fname.Text) cmd.Parameters.AddWithValue("@emp_mname", tb_mname.Text) cmd.Parameters.AddWithValue("@emp_lastname", tb_lname.Text) -- 显式指定参数类型并赋值Checked属性 cmd.Parameters.Add("@new", SqlDbType.Bit).Value = cb_new.Checked cmd.ExecuteNonQuery() End Using -- Using块会自动释放连接,无需手动Close End Using
内容的提问来源于stack exchange,提问作者programmer_wannabe
相关产品推荐
相关产品推荐

