SQL Server : UPDATE not updating database Using C#

2019-03-05 06:11发布

问题:

I have a webpage that has a web form on it. The form is pre-populated with data from a SQL Server database. The user can go in and edit any of the fields and click the "Save" button on the bottom to update the record in the database. For some reason, the update statement isnt updating the record in the database when I have the form pre-filled with data. If I remove the code pre-filling the form on the page load method the update statement works as it should. When I have the form pre-filled with data in the page load method, the update statement appears to be updating the record with the same data that it already had in it, not the new information the user entered. I am completely lost on how to fix this issue as the form has to have data preloaded in it so the user can edit the form respectively.

Can someone point out an error or some correction that I need to make? I've hit the proverbially brick wall :(

Below you will find the page load method and the save button click event handler.

protected void Page_Load(object sender, EventArgs e)
{
    String projectID = Request.QueryString["jobID"];
    String reportID = Request.QueryString["reportID"];

    string selectStatement = "SELECT * FROM ahu_data WHERE unit_ID = " + reportID;
    string sqlConnectionString = "Removed for Security";

    using (SqlConnection connection1 = new SqlConnection(sqlConnectionString))
    {
        SqlCommand selectCommand = new SqlCommand(selectStatement, connection1);
        connection1.Open();

        using (SqlDataReader reader = selectCommand.ExecuteReader())
        {
            while (reader.Read())
            {
                UMTextBox.Text = reader["make"].ToString();
                UMOTextBox.Text = reader["model"].ToString();
                UTTextBox.Text = reader["type"].ToString();
                USITextBox.Text = reader["size"].ToString();
                USTextBox.Text = reader["serial"].ToString();
                UATextBox.Text = reader["arrangement"].ToString();
                UCTextBox.Text = reader["class"].ToString();
                UDTextBox.Text = reader["discharge"].ToString();
                UMSTextBox.Text = reader["make_sheave"].ToString();
                USDTextBox.Text = reader["sheave_diameter"].ToString();
                USBTextBox.Text = reader["sheave_bore"].ToString();
                UBNTextBox.Text = reader["belts"].ToString();
                UBSTextBox.Text = reader["belt_size"].ToString();
                UFNTextBox.Text = reader["filters"].ToString();
                UFSTextBox.Text = reader["filter_size"].ToString();
                TCFMDTextBox.Text = reader["unitTotalCFMDesign"].ToString();
                TCFMATextBox.Text = reader["unitTotalCFMActual"].ToString();
                RACFMDTextBox.Text = reader["unitReturnAirCFMDesign"].ToString();
                RACFMATextBox.Text = reader["unitReturnAirCFMActual"].ToString();
                OACFMDTextBox.Text = reader["unitOutsideAirCFMDesign"].ToString();
                OACFMATextBox.Text = reader["unitOutsideAirCFMActual"].ToString();
                EACFMDTextBox.Text = reader["unitExhaustAirCFMDesign"].ToString();
                EACFMATextBox.Text = reader["unitExhaustAirCFMActual"].ToString();
                FRPMDTextBox.Text = reader["unitFanRPMDesign"].ToString();
                FRPMATextBox.Text = reader["unitFanRPMActual"].ToString();
                MRPMDTextBox.Text = reader["unitMotorRPMDesign"].ToString();
                MRPMATextBox.Text = reader["unitMotorRPMActual"].ToString();
                MVDTextBox.Text = reader["unitMotorVoltsDesign"].ToString();
                MVATextBox.Text = reader["unitMotorVoltsActual"].ToString();
                MADTextBox.Text = reader["unitMotorAmpsDesign"].ToString();
                MAATextBox.Text = reader["unitMotorAmpsActual"].ToString();
                MMTextBox.Text = reader["motor_make"].ToString();
                MFTextBox.Text = reader["motor_frame"].ToString();
                MHPTextBox.Text = reader["motor_hp"].ToString();
                MRPMTextBox.Text = reader["motor_rpm"].ToString();
                MVTextBox.Text = reader["motor_volts"].ToString();
                MPHTextBox.Text = reader["motor_phasehz"].ToString();
                MFLATextBox.Text = reader["motor_fl_amps"].ToString();
                MSFTextBox.Text = reader["motor_sf"].ToString();
                MMSTextBox.Text = reader["motor_make_sheave"].ToString();
                MSDTextBox.Text = reader["motor_sheave_diameter"].ToString();
                MSBTextBox.Text = reader["motor_sheave_bore"].ToString();
                MODTextBox.Text = reader["motor_operating_diameter"].ToString();
                MSCDTextBox.Text = reader["motor_sheave_center_distance"].ToString();
                TSPDTextBox.Text = reader["motorTotalSPDesign"].ToString();
                TSPATextBox.Text = reader["motorTotalSPActual"].ToString();
                ESPDTextBox.Text = reader["motorEnteringSPDesign"].ToString();
                ESPATextBox.Text = reader["motorEnteringSPActual"].ToString();
                SSPDTextBox.Text = reader["motorSuctionSPDesign"].ToString();
                SSPATextBox.Text = reader["motorSuctionSPActual"].ToString();
                DSPDTextBox.Text = reader["motorDischargeSPDesign"].ToString();
                DSPATextBox.Text = reader["motorDischargeSPActual"].ToString();
                PCSPDTextBox.Text = reader["motorPreheatCoilSPDesign"].ToString();
                PCSPATextBox.Text = reader["motorPreheatCoilSPActual"].ToString();
                CCSPDTextBox.Text = reader["motorCoolingCoilSPDesign"].ToString();
                CCSPATextBox.Text = reader["motorCoolingCoilSPActual"].ToString();
                RCSPDTextBox.Text = reader["motorReheatCoilSPDesign"].ToString();
                RCSPATextBox.Text = reader["motorReheatCoilSPActual"].ToString();
                FSPDTextBox.Text = reader["motorFilterSPDesign"].ToString();
                FSPATextBox.Text = reader["motorFilterSPActual"].ToString();
                AFSPDTextBox.Text = reader["motorAfterFilterSPDesign"].ToString();
                AFSPATextBox.Text = reader["motorAfterFilterSPActual"].ToString();
                WSPDTextBox.Text = reader["motorWheelSPDesign"].ToString();
                WSPATextBox.Text = reader["motorWheelSPActual"].ToString();
                RemarksTextArea.Text = reader["remarks"].ToString();
            }
        }
        connection1.Close();
    }
}

And here is the Save button click handler that updates the record in the database.

protected void SaveReportButton_Click(object sender, EventArgs e)
{
    String projectID = Request.QueryString["jobID"];
    String reportID = Request.QueryString["reportID"];
    string unitMake = UMTextBox.Text;
    string unitModel = UMOTextBox.Text;
    string unitType = UTTextBox.Text;
    string unitSize = USITextBox.Text;
    string unitSerial = USTextBox.Text;
    string unitArrangement = UATextBox.Text;
    string unitClass = UCTextBox.Text;
    string unitDischarge = UDTextBox.Text;
    string unitMS = UMSTextBox.Text;
    string unitSD = USDTextBox.Text;
    string unitSB = USBTextBox.Text;
    string unitBeltNumber = UBNTextBox.Text;
    string unitBeltSize = UBSTextBox.Text;
    string unitFilterNumber = UFNTextBox.Text;
    string unitFilterSize = UFSTextBox.Text;
    string unitTotalCFMDesign = TCFMDTextBox.Text;
    string unitTotalCFMActual = TCFMATextBox.Text;
    string unitReturnAirCFMDesign = RACFMDTextBox.Text;
    string unitReturnAirCFMActual = RACFMATextBox.Text;
    string unitOutsideAirCFMDesign = OACFMDTextBox.Text;
    string unitOutsideAirCFMActual = OACFMATextBox.Text;
    string unitExhaustAirCFMDesign = EACFMDTextBox.Text;
    string unitExhaustAirCFMActual = EACFMATextBox.Text;
    string unitFanRPMDesign = FRPMDTextBox.Text;
    string unitFanRPMActual = FRPMATextBox.Text;
    string unitMotorRPMDesign = MRPMDTextBox.Text;
    string unitMotorRPMActual = MRPMATextBox.Text;
    string unitMotorVoltsDesign = MVDTextBox.Text;
    string unitMotorVoltsActual = MVATextBox.Text;
    string unitMotorAmpsDesign = MADTextBox.Text;
    string unitMotorAmpsActual = MAATextBox.Text;
    string motorMake = MMTextBox.Text;
    string motorFrame = MFTextBox.Text;
    string motorHP = MHPTextBox.Text;
    string motorRPM = MRPMTextBox.Text;
    string motorVolts = MVTextBox.Text;
    string motorPhaseHz = MPHTextBox.Text;
    string motorFullLoadAmps = MFLATextBox.Text;
    string motorSF = MSFTextBox.Text;
    string motorMakeSheave = MMSTextBox.Text;
    string motorSheaveDiameter = MSDTextBox.Text;
    string motorSheaveBore = MSBTextBox.Text;
    string motorOperatingDiameter = MODTextBox.Text;
    string motorSheaveCDistance = MSCDTextBox.Text;
    string motorTotalSPDesign = TSPDTextBox.Text;
    string motorTotalSPActual = TSPATextBox.Text;
    string motorEnteringSPDesign = ESPDTextBox.Text;
    string motorEnteringSPActual = ESPATextBox.Text;
    string motorSuctionSPDesign = SSPDTextBox.Text;
    string motorSuctionSPActual = SSPATextBox.Text;
    string motorDischargeSPDesign = DSPDTextBox.Text;
    string motorDischargeSPActual = DSPATextBox.Text;
    string motorPreheatCoilSPDesign = PCSPDTextBox.Text;
    string motorPreheatCoilSPActual = PCSPATextBox.Text;
    string motorCoolingCoilSPDesign = CCSPDTextBox.Text;
    string motorCoolingCoilSPActual = CCSPATextBox.Text;
    string motorReheatCoilSPDesign = RCSPDTextBox.Text;
    string motorReheatCoilSPActual = RCSPATextBox.Text;
    string motorFilterSPDesign = FSPDTextBox.Text;
    string motorFilterSPActual = FSPATextBox.Text;
    string motorAfterFilterSPDesign = AFSPDTextBox.Text;
    string motorAfterFilterSPActual = AFSPATextBox.Text;
    string motorWheelSPDesign = WSPDTextBox.Text;
    string motorWheelSPActual = WSPATextBox.Text;
    string remarks = RemarksTextArea.Text;

    string updateStatement = @"UPDATE ahu_data SET make=@UNITMAKE, model=@UNITMODEL, type=@UNITTYPE, size=@UNITSIZE, serial=@UNITSERIAL, arrangement=@UNITARRANGEMENT, 
                             class=@UNITCLASS, discharge=@UNITDISCHARGE, make_sheave=@UNITMS, sheave_diameter=@UNITSD, sheave_bore=@UNITSB, 
                             belts=@UNITBELTNUMBER, belt_size=@UNITBELTSIZE, filters=@UNITFILTERNUMBER, filter_size=@UNITBELTSIZE, 
                             unitTotalCFMDesign=@UNITTOTALCFMDESIGN, unitTotalCFMActual=@UNITTOTALCFMACTUAL, unitReturnAirCFMDesign=@UNITRETURNAIRCFMDESIGN, 
                             unitReturnAirCFMActual=@UNITRETURNAIRCFMACTUAL, unitOutsideAirCFMDesign=@UNITOUTSIDEAIRCFMDESIGN, 
                             unitOutsideAirCFMActual=@UNITOUTSIDEAIRCFMACTUAL, unitExhaustAirCFMDesign=@UNITEXHAUSTAIRCFMDESIGN, 
                             unitExhaustAirCFMActual=@UNITEXHAUSTAIRCFMACTUAL, unitFanRPMDesign=@UNITFANRPMDESIGN, 
                             unitFanRPMActual=@UNITFANRPMACTUAL, unitMotorRPMDesign=@UNITMOTORRPMDESIGN, unitMotorRPMActual=@UNITMOTORRPMACTUAL, 
                             unitMotorVoltsDesign=@UNITMOTORVOLTSDESIGN, unitMotorVoltsActual=@UNITMOTORVOLTSACTUAL, unitMotorAmpsDesign=@UNITMOTORAMPSDESIGN, 
                             unitMotorAmpsActual=@UNITMOTORAMPSACTUAL, motor_make=@MOTORMAKE, motor_frame=@MOTORFRAME, motor_hp=@MOTORHP, 
                             motor_rpm=@MOTORRPM, motor_volts=@MOTORVOLTS, motor_phasehz=@MOTORPHASEHZ, motor_fl_amps=@MOTORFULLLOADAMPS, 
                             motor_sf=@MOTORSF, motor_make_sheave=@MOTORMAKESHEAVE, motor_sheave_diameter=@MOTORSHEAVEDIAMETER, 
                             motor_sheave_bore=@MOTORSHEAVEBORE, motor_operating_diameter=@MOTOROPERATINGDIAMETER, motor_sheave_center_distance=@MOTORSHEAVECDISTANCE, 
                             motorTotalSPDesign=@MOTORTOTALSPDESIGN, motorTotalSPActual=@MOTORTOTALSPACTUAL, motorEnteringSPDesign=@MOTORENTERINGSPDESIGN, 
                             motorEnteringSPActual=@MOTORENTERINGSPACTUAL, motorSuctionSPDesign=@MOTORSUCTIONSPDESIGN, motorSuctionSPActual=@MOTORSUCTIONSPACTUAL, 
                             motorDischargeSPDesign=@MOTORDISCHARGESPDESIGN, motorDischargeSPActual=@MOTORDISCHARGESPACTUAL, motorPreheatCoilSPDesign=@MOTORPREHEATCOILSPDESIGN, 
                             motorPreheatCoilSPActual=@MOTORPREHEATCOILSPACTUAL, motorCoolingCoilSPDesign=@MOTORCOOLINGCOILSPDESIGN, motorCoolingCoilSPActual=@MOTORCOOLINGCOILSPACTUAL, 
                             motorReheatCoilSPDesign=@MOTORREHEATCOILSPDESIGN, motorReheatCoilSPActual=@MOTORREHEATCOILSPACTUAL, motorFilterSPDesign=@MOTORFILTERSPDESIGN, 
                             motorFilterSPActual=@MOTORFILTERSPACTUAL, motorAfterFilterSPDesign=@MOTORAFTERFILTERSPDESIGN, motorAfterFilterSPActual=@MOTORAFTERFILTERSPACTUAL, 
                             motorWheelSPDesign=@MOTORWHEELSPDESIGN, motorWheelSPActual=@MOTORWHEELSPACTUAL, remarks=@REMARKS WHERE unit_ID = " + reportID;
    string sqlConnectionString = "Removed for Security";

    using (SqlConnection connection1 = new SqlConnection(sqlConnectionString))
    {
            connection1.Open();

            using (SqlCommand updateCommand = new SqlCommand(updateStatement, connection1))
            {
                    updateCommand.Parameters.AddWithValue("@UNITMAKE", unitMake);
                    updateCommand.Parameters.AddWithValue("@UNITMODEL", unitModel);
                    updateCommand.Parameters.AddWithValue("@UNITTYPE", unitType);
                    updateCommand.Parameters.AddWithValue("@UNITSIZE", unitSize);
                    updateCommand.Parameters.AddWithValue("@UNITSERIAL", unitSerial);
                    updateCommand.Parameters.AddWithValue("@UNITARRANGEMENT", unitArrangement);
                    updateCommand.Parameters.AddWithValue("@UNITCLASS", unitClass);
                    updateCommand.Parameters.AddWithValue("@UNITDISCHARGE", unitDischarge);
                    updateCommand.Parameters.AddWithValue("@UNITMS", unitMS);
                    updateCommand.Parameters.AddWithValue("@UNITSD", unitSD);
                    updateCommand.Parameters.AddWithValue("@UNITSB", unitSB);
                    updateCommand.Parameters.AddWithValue("@UNITBELTNUMBER", unitBeltNumber);
                    updateCommand.Parameters.AddWithValue("@UNITBELTSIZE", unitBeltSize);
                    updateCommand.Parameters.AddWithValue("@UNITFILTERNUMBER", unitFilterNumber);
                    updateCommand.Parameters.AddWithValue("@UNITFILTERSIZE", unitFilterSize);
                    updateCommand.Parameters.AddWithValue("@UNITTOTALCFMDESIGN", unitTotalCFMDesign);
                    updateCommand.Parameters.AddWithValue("@UNITTOTALCFMACTUAL", unitTotalCFMActual);
                    updateCommand.Parameters.AddWithValue("@UNITRETURNAIRCFMDESIGN", unitReturnAirCFMDesign);
                    updateCommand.Parameters.AddWithValue("@UNITRETURNAIRCFMACTUAL", unitReturnAirCFMActual);
                    updateCommand.Parameters.AddWithValue("@UNITOUTSIDEAIRCFMDESIGN", unitOutsideAirCFMDesign);
                    updateCommand.Parameters.AddWithValue("@UNITOUTSIDEAIRCFMACTUAL", unitOutsideAirCFMActual);
                    updateCommand.Parameters.AddWithValue("@UNITEXHAUSTAIRCFMDESIGN", unitExhaustAirCFMDesign);
                    updateCommand.Parameters.AddWithValue("@UNITEXHAUSTAIRCFMACTUAL", unitExhaustAirCFMActual);
                    updateCommand.Parameters.AddWithValue("@UNITFANRPMDESIGN", unitFanRPMDesign);
                    updateCommand.Parameters.AddWithValue("@UNITFANRPMACTUAL", unitFanRPMActual);
                    updateCommand.Parameters.AddWithValue("@UNITMOTORRPMDESIGN", unitMotorRPMDesign);
                    updateCommand.Parameters.AddWithValue("@UNITMOTORRPMACTUAL", unitMotorRPMActual);
                    updateCommand.Parameters.AddWithValue("@UNITMOTORVOLTSDESIGN", unitMotorVoltsDesign);
                    updateCommand.Parameters.AddWithValue("@UNITMOTORVOLTSACTUAL", unitMotorVoltsActual);
                    updateCommand.Parameters.AddWithValue("@UNITMOTORAMPSDESIGN", unitMotorAmpsDesign);
                    updateCommand.Parameters.AddWithValue("@UNITMOTORAMPSACTUAL", unitMotorAmpsActual);
                    updateCommand.Parameters.AddWithValue("@MOTORMAKE", motorMake);
                    updateCommand.Parameters.AddWithValue("@MOTORFRAME", motorFrame);
                    updateCommand.Parameters.AddWithValue("@MOTORHP", motorHP);
                    updateCommand.Parameters.AddWithValue("@MOTORRPM", motorRPM);
                    updateCommand.Parameters.AddWithValue("@MOTORVOLTS", motorVolts);
                    updateCommand.Parameters.AddWithValue("@MOTORPHASEHZ", motorPhaseHz);
                    updateCommand.Parameters.AddWithValue("@MOTORFULLLOADAMPS", motorFullLoadAmps);
                    updateCommand.Parameters.AddWithValue("@MOTORSF", motorSF);
                    updateCommand.Parameters.AddWithValue("@MOTORMAKESHEAVE", motorMakeSheave);
                    updateCommand.Parameters.AddWithValue("@MOTORSHEAVEDIAMETER", motorSheaveDiameter);
                    updateCommand.Parameters.AddWithValue("@MOTORSHEAVEBORE", motorSheaveBore);
                    updateCommand.Parameters.AddWithValue("@MOTOROPERATINGDIAMETER", motorOperatingDiameter);
                    updateCommand.Parameters.AddWithValue("@MOTORSHEAVECDISTANCE", motorSheaveCDistance);
                    updateCommand.Parameters.AddWithValue("@MOTORTOTALSPDESIGN", motorTotalSPDesign);
                    updateCommand.Parameters.AddWithValue("@MOTORTOTALSPACTUAL", motorTotalSPActual);
                    updateCommand.Parameters.AddWithValue("@MOTORENTERINGSPDESIGN", motorEnteringSPDesign);
                    updateCommand.Parameters.AddWithValue("@MOTORENTERINGSPACTUAL", motorEnteringSPActual);
                    updateCommand.Parameters.AddWithValue("@MOTORSUCTIONSPDESIGN", motorSuctionSPDesign);
                    updateCommand.Parameters.AddWithValue("@MOTORSUCTIONSPACTUAL", motorSuctionSPActual);
                    updateCommand.Parameters.AddWithValue("@MOTORDISCHARGESPDESIGN", motorDischargeSPDesign);
                    updateCommand.Parameters.AddWithValue("@MOTORDISCHARGESPACTUAL", motorDischargeSPActual);
                    updateCommand.Parameters.AddWithValue("@MOTORPREHEATCOILSPDESIGN", motorPreheatCoilSPDesign);
                    updateCommand.Parameters.AddWithValue("@MOTORPREHEATCOILSPACTUAL", motorPreheatCoilSPActual);
                    updateCommand.Parameters.AddWithValue("@MOTORCOOLINGCOILSPDESIGN", motorCoolingCoilSPDesign);
                    updateCommand.Parameters.AddWithValue("@MOTORCOOLINGCOILSPACTUAL", motorCoolingCoilSPActual);
                    updateCommand.Parameters.AddWithValue("@MOTORREHEATCOILSPDESIGN", motorReheatCoilSPDesign);
                    updateCommand.Parameters.AddWithValue("@MOTORREHEATCOILSPACTUAL", motorReheatCoilSPActual);
                    updateCommand.Parameters.AddWithValue("@MOTORFILTERSPDESIGN", motorFilterSPDesign);
                    updateCommand.Parameters.AddWithValue("@MOTORFILTERSPACTUAL", motorFilterSPActual);
                    updateCommand.Parameters.AddWithValue("@MOTORAFTERFILTERSPDESIGN", motorAfterFilterSPDesign);
                    updateCommand.Parameters.AddWithValue("@MOTORAFTERFILTERSPACTUAL", motorAfterFilterSPActual);
                    updateCommand.Parameters.AddWithValue("@MOTORWHEELSPDESIGN", motorWheelSPDesign);
                    updateCommand.Parameters.AddWithValue("@MOTORWHEELSPACTUAL", motorWheelSPActual);
                    updateCommand.Parameters.AddWithValue("@REMARKS", remarks);

                    updateCommand.ExecuteNonQuery();
            }

            connection1.Close();
        }
}

回答1:

ASP.NET page lifecycle causes this situation if you don't protect the Page_Load from reexecuting the code that fill your textboxes.

if (!IsPostBack)
{
    string selectStatement = "SELECT * FROM ahu_data WHERE unit_ID = " + reportID;
    string sqlConnectionString = "Removed for Security";
    using (SqlConnection connection1 = new SqlConnection(sqlConnectionString))
    {
      .... rest of code that pre-fill your fields

Page.IsPostBack is a boolean property of the Page that informs your code if the page is called for the first time or if it is called as a consequence of some event that need to be processed server-side.
In the latter case you should not execute again the code that fills your textboxes otherwise, when the flow reaches your button code, you will find the textboxes with the original values instead of the modified ones because the Page_Load has resetted everything.

And do not forget the comment above about parameterizing your first query. You have already done the biggest part parameterizing the UPDATE, just one parameter remains and it is complete.



回答2:

The update is working just fine, the problem is that it's using the same data that's already in the table, so it won't change anything.

When you click the save button the page does a postback to run the code on the server. First the Page_Load event runs and loads the original data that will replace the data that you entered in the form. Then the SaveReportButton_Click event runs that updates the record.

To keep the Page_Load event handler from replacing the data in the form, you should use the isPostBack property to check if the page is loaded due to a postback:

if (!IsPostBack) {
  // load the data from the database in here
}