C# ASP.NET - Get new values entered by client after page load with current values

Viewed 44

I'm having a bit of a problem here, on page_load() I'm setting values for multiple HTML inputs:

session = Request.Cookies["Login"];
userid = session.Values["UserID"].ToString();
email = session.Values["Email"].ToString();
username = session.Values["Username"].ToString();
type = session.Values["Type"].ToString();
branchid = session.Values["BranchID"].ToString();
branchName = session.Values["BranchName"].ToString();
ownerID = session.Values["OwnerID"].ToString();

if (Request.QueryString.Count != 0)
{
    if (!Page.IsPostBack)
    {
        carid = Request.QueryString["carid"];

        cmd.CommandText = "select * from Client where BranchID='" + branchid + "'";

        DataTable allclients = new DataTable();
        sda.Fill(allclients);

        if (allclients.Rows.Count > 0)
        {
            foreach (DataRow dr in allclients.Rows)
            {
                ddl_client.Items.Add(dr["client_name"].ToString());
            }
        }

        cmd.CommandText = "select distinct(CompanyName) from CarModels";

        DataTable carcompanies = new DataTable();
        sda.Fill(carcompanies);

        if (carcompanies.Rows.Count > 0)
        {
            foreach (DataRow dr in carcompanies.Rows)
            {
                ddl_car_company.Items.Add(dr["CompanyName"].ToString());
            }
        }

        cmd.CommandText = "select ModelYear from CarModelYear order by ModelyearID desc";

        DataTable modelyear = new DataTable();
        sda.Fill(modelyear);

        if (modelyear.Rows.Count > 0)
        {
            foreach (DataRow dr in modelyear.Rows)
            {
                txt_car_model.Items.Add(dr["ModelYear"].ToString());
            }
        }

        cmd.CommandText = "select * from Car where car_id='" + carid + "' and userid='" + userid + "'";

        dt.Clear();
        dt.Columns.Clear();

        sda.Fill(dt);

        if (dt.Rows.Count > 0)
        {
            txt_car_plate.Value = dt.Rows[0]["car_plate"].ToString();
            ddl_car_company.SelectedValue = dt.Rows[0]["car_company"].ToString();

            cmd.CommandText = "select CarName from CarModels where CompanyName='" + ddl_car_company.SelectedItem.Value + "'";

            DataTable carnames = new DataTable();
            sda.Fill(carnames);

            if (carnames.Rows.Count > 0)
            {
                ddl_car_type.Items.Clear();

                foreach (DataRow dr in carnames.Rows)
                {
                    ddl_car_type.Items.Add(dr["CarName"].ToString());
                }
            }

            txt_car_model.Items.FindByValue(dt.Rows[0]["car_model"].ToString()).Selected = true;
            ddl_car_type.SelectedValue = dt.Rows[0]["car_type"].ToString();
            txt_body_number.Value = dt.Rows[0]["body_number"].ToString();
            txt_car_color.Value = dt.Rows[0]["car_color"].ToString();
            txt_notes.Value = dt.Rows[0]["notes"].ToString();
            clientid = dt.Rows[0]["client_id"].ToString();

            cmd.CommandText = "select * from Client where client_id='" + clientid + "'";
            
            DataTable client = new DataTable();
            sda.Fill(client);

            if (client.Rows.Count > 0)
            {
                ddl_client.Items.FindByValue(client.Rows[0]["client_name"].ToString()).Selected = true;
                txt_client_cellphone1.Value = client.Rows[0]["client_cellphone"].ToString();
            }
        }
    }
}

This is a page for editing current values with new ones...

Now for the editing code it's just a SQL update command..

cmd.Parameters.AddWithValue("@plate", Request["txt_car_plate"]);
cmd.Parameters.AddWithValue("@company", Request["ddl_car_company"]);
cmd.Parameters.AddWithValue("@type", Request["ddl_car_type"]);
cmd.Parameters.AddWithValue("@model", Request["txt_car_model"]);
cmd.Parameters.AddWithValue("@body", Request["txt_body_number"]);
cmd.Parameters.AddWithValue("@color", Request["txt_car_color"]);
cmd.Parameters.AddWithValue("@notes", Request["txt_notes"]);
cmd.Parameters.AddWithValue("@cid", clientid);

cmd.CommandText = "update Car set car_plate=@plate,car_company=@company,car_type=@type,car_model=@model,body_number=@body,car_color=@color,notes=@notes,client_id=@cid where car_id='" + carid + "'";

cmd.ExecuteNonQuery();
Response.Redirect("vehicle.aspx?carid=" + carid);

What am I missing here? I tried removing the (!Page.IsPostBack) part, but I get this error :

The parameterized query '(@plate nvarchar(11),@company nvarchar(17),@type nvarchar(2),@mo' expects the parameter '@cid', which was not supplied

Although I'm opening this page with code :

if (carid.Length > 0)
{
    Response.Redirect("Edit.aspx?carid=" + carid);
}

So it's obvious that carid is never null !

Please any help would be much appreciated

1 Answers

Well, @cid is probably null.

You're saying that shouldn't be the case, because carid is not null. But that is not important.

You're 'filling up' @cid with this code

cmd.Parameters.AddWithValue("@cid", clientid);

and clientid is assigned to

clientid = dt.Rows[0]["client_id"].ToString();

and there probably lies your problem...

Related