You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

DropDownList选中项插入SQL数据库异常问题排查

解决Web Forms中DropDownList选中值无法插入SQL表的问题

兄弟,看了你的代码我立刻就发现了核心问题——你在Page_Load里每次页面加载(包括点击提交按钮的回发操作)都会重新绑定DropDownList,这直接导致用户选中的选项在提交时被重置成默认值,自然插不到正确的内容!

核心修复:给DropDownList绑定加回发判断

Web Forms里Page_Load事件会在页面第一次加载和每次回发时都执行,你现在的逻辑是不管什么情况都重新绑定下拉框,用户选的值直接被覆盖了。只需要给绑定代码加上!IsPostBack判断,让下拉框只在第一次加载页面时初始化:

修改后的Page_Load代码:

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack) // 关键:仅首次加载页面时绑定下拉框
    {
        // 绑定CIT Company下拉框
        using (SqlConnection con = new SqlConnection("Data Source=(LocalDB)\\MSSQLLocalDB;AttachDbFilename=C:\\****;Persist Security Info=True;User ID=***;Password=****;Connect Timeout=30"))
        {
            con.Open();
            SqlCommand cmd = new SqlCommand("Select CIT_ID, CIT_CompanyName from CIT_Details", con);
            ddlCITCompany.DataSource = cmd.ExecuteReader();
            ddlCITCompany.DataTextField = "CIT_CompanyName";
            ddlCITCompany.DataValueField = "CIT_ID";
            ddlCITCompany.DataBind();
        }

        // 绑定Site Details下拉框
        using (SqlConnection con2 = new SqlConnection("Data Source=(LocalDB)\\MSSQLLocalDB;AttachDbFilename=C:\\***;Persist Security Info=True;User ID=***;Password=****;Connect Timeout=30"))
        {
            con2.Open();
            SqlCommand cmd2 = new SqlCommand("Select Site_ID, Site_Name from Site_Details", con2);
            ddlVisitingCentre.DataSource = cmd2.ExecuteReader();
            ddlVisitingCentre.DataTextField = "Site_Name";
            ddlVisitingCentre.DataValueField = "Site_ID";
            ddlVisitingCentre.DataBind();
        }
    }
}

我还给你加了using语句,这样数据库连接会自动释放,避免资源泄漏,这是Web Forms操作数据库的好习惯~

额外排查点(如果修复后仍有问题)

  1. 字段类型匹配检查:如果CIT_ID和Site_ID是整数类型,SelectedValue是字符串,AddWithValue会自动转换,但如果报错可以显式指定参数类型:
    cmd.Parameters.Add("@CIT_Company", SqlDbType.Int).Value = int.Parse(ddlCITCompany.SelectedValue);
    
  2. 调试确认选中值:在Submit2_Click开头加一行调试代码,验证实际拿到的选中值:
    Debug.WriteLine($"选中的CIT Company值:{ddlCITCompany.SelectedValue}");
    Debug.WriteLine($"选中的Visiting Centre值:{ddlVisitingCentre.SelectedValue}");
    
  3. ViewState检查:确保DropDownList的EnableViewState属性为true(默认就是true,除非你手动修改过)。

优化后的提交事件代码

我顺便优化了提交逻辑的资源管理,代码更简洁安全:

protected void Submit2_Click(object sender, EventArgs e)
{
    string connectionString = "Data Source=(LocalDB)\\MSSQLLocalDB;AttachDbFilename=C:\\***;Persist Security Info=True;User ID=***;Password=****;Connect Timeout=30";
    string insertSql = @"INSERT INTO Booking_Data 
                        (Visiting_Centre, Expected_Arrival_Date, Expected_Arrival_Time, 
                         Actual_Arrival_Date, Actual_Arrival_Time, CIT_Company, 
                         Driver_Name, Vehicle_Registration, Supplied_Password, 
                         Delivery_In, Delivery_Out, Time_Booked_In, Time_Booked_Out) 
                        VALUES (@Visiting_Centre, @Expected_Arrival_Date, @Expected_Arrival_Time, 
                                @Actual_Arrival_Date, @Actual_Arrival_Time, @CIT_Company, 
                                @Driver_Name, @Vehicle_Registration, @Supplied_Password, 
                                @Delivery_In, @Delivery_Out, @Time_Booked_In, @Time_Booked_Out)";

    using (SqlConnection con = new SqlConnection(connectionString))
    {
        con.Open();
        using (SqlCommand cmd = new SqlCommand(insertSql, con))
        {
            cmd.Parameters.AddWithValue("@Visiting_Centre", ddlVisitingCentre.SelectedValue);
            cmd.Parameters.AddWithValue("@Expected_Arrival_Date", txtExpectedArrivalDate.Text);
            cmd.Parameters.AddWithValue("@Expected_Arrival_Time", txtExpectedArrivalTime.Text);
            cmd.Parameters.AddWithValue("@Actual_Arrival_Date", txtActualArrivalDate.Text);
            cmd.Parameters.AddWithValue("@Actual_Arrival_Time", txtActualArrivalTime.Text);
            cmd.Parameters.AddWithValue("@CIT_Company", ddlCITCompany.SelectedValue);
            cmd.Parameters.AddWithValue("@Driver_Name", txtDriverName.Text);
            cmd.Parameters.AddWithValue("@Vehicle_Registration", txtVehicleRegistration.Text);
            cmd.Parameters.AddWithValue("@Supplied_Password", txtSuppliedPassword.Text);
            cmd.Parameters.AddWithValue("@Delivery_In", txtDeliveryIn.Text);
            cmd.Parameters.AddWithValue("@Delivery_Out", txtDeliveryOut.Text);
            cmd.Parameters.AddWithValue("@Time_Booked_In", txtTimeBookedIn.Text);
            cmd.Parameters.AddWithValue("@Time_Booked_Out", txtTimeBookedOut.Text);

            cmd.ExecuteNonQuery();
        }
    }
}

这样修改后,就能正确插入你选中的DropDownList值了!

内容的提问来源于stack exchange,提问作者KLomax

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 07:14:50