Click here to Skip to main content
15,887,907 members
Please Sign up or sign in to vote.
3.00/5 (1 vote)
See more:
Hi
I have been converted my generic list to a datatable, but something is wrong because is empty.

Is my conversion right? How do I set the session to the datatable, so it know where to find the values??

C#
 private void opretOrdre()
    {



        SqlConnection conn = new SqlConnection();
        conn.ConnectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ToString();

        SqlCommand cmd = new SqlCommand();
        cmd.Connection = conn;
        cmd.CommandText = "INSERT INTO ordre (dato, navn, efternavn, mobil, adresse, mail, postnr, bynavn) VALUES(GETDATE(), @navn, @efternavn, @mobil, @adresse, @mail, @postnr, @bynavn); SELECT SCOPE_IDENTITY()";

        cmd.Parameters.Add("@navn", SqlDbType.VarChar).Value = TextBox_navn.Text;
        cmd.Parameters.Add("@efternavn", SqlDbType.VarChar).Value = TextBox_efternavn.Text;
        cmd.Parameters.Add("@mobil", SqlDbType.VarChar).Value = TextBox_mobil.Text;
        cmd.Parameters.Add("@adresse", SqlDbType.VarChar).Value = TextBox_adresse.Text;
        cmd.Parameters.Add("@mail", SqlDbType.VarChar).Value = TextBox_mail.Text;
        cmd.Parameters.Add("@postnr", SqlDbType.VarChar).Value = TextBox_postnr.Text;
        cmd.Parameters.Add("@bynavn", SqlDbType.VarChar).Value = TextBox_by.Text;


        conn.Open();
        object orderId = cmd.ExecuteScalar();
        conn.Close();

        //SÅ skal vi bruge de parametre der skal til for at kunne skrive til vore OrdrerLinier Tabel
        //Og evt. opdatere vores produkts lagerbeholdning
        //########################//
        //SÅ til vores ordrerlinier
        //fk_ordre - den fra object'et
        cmd.Parameters.Add("@fk_ordre", SqlDbType.Int).Value = orderId;
        //fk_produktId - fra session _kurv. Sættes nu til 0, den den skal ind i foreach løkken og få sin værdi.
        cmd.Parameters.Add("@fk_frugt_id", SqlDbType.Int).Value = 0;
        cmd.Parameters.Add("@fk_deli_id", SqlDbType.Int).Value = 0;
        cmd.Parameters.Add("@fk_groent_id", SqlDbType.Int).Value = 0;
        //Produkt antal - sammen som Id'et. Sættes til 0 og får værdi i løkken
        cmd.Parameters.Add("@Antal", SqlDbType.Int).Value = 0;
        

        cmd.Parameters.Add("@frugt_id", SqlDbType.VarChar).Value = 0;
        cmd.Parameters.Add("@deli_id", SqlDbType.VarChar).Value = 0;
        cmd.Parameters.Add("@groent_id", SqlDbType.VarChar).Value = 0;


        List<ValgtFrugt> valgteFrugter = (List<ValgtFrugt>)Session["ValgteFrugter"];

        var dataTable = new DataTable(Session["ValgteFrugter"].ToString());

   

dataTable.Columns.Add("FrugtID", typeof(int));
dataTable.Columns.Add("FrugtNavn", typeof(string));
        dataTable.Columns.Add("Antal", typeof(int));
        dataTable.Columns.Add("FrugtVaerdi", typeof(int));

        foreach (ValgtFrugt frugt in valgteFrugter)
{
    dataTable.Rows.Add(frugt.FrugtID, frugt.FrugtNavn, frugt.Antal, frugt.FrugtVaerdi);
}

        List<ValgtGroent> valgteGroent = (List<ValgtGroent>)Session["ValgteGroent"];
        var dataTable1 = new DataTable(Session["ValgteGroent"].ToString());

        dataTable1.Columns.Add("GroentID", typeof(int));
        dataTable1.Columns.Add("GroentNavn", typeof(string));
        dataTable1.Columns.Add("AntalGroent", typeof(int));
        dataTable1.Columns.Add("GroentVaerdi", typeof(int));

        foreach (ValgtGroent groent in valgteGroent)
        {
            dataTable1.Rows.Add(groent.GroentID, groent.GroentNavn, groent.AntalGroent, groent.GroentVaerdi);
        }
        List<ValgtDeli> valgteDeli = (List<ValgtDeli>)Session["ValgteDeli"];
        var dataTable2 = new DataTable(Session["ValgteDeli"].ToString());

        dataTable2.Columns.Add("DeliID", typeof(int));
        dataTable2.Columns.Add("DeliNavn", typeof(string));
        dataTable2.Columns.Add("Antal", typeof(int));
       
        foreach (ValgtDeli delikatesse in valgteDeli)
        {
            dataTable2.Rows.Add(delikatesse.DeliID, delikatesse.DeliNavn, delikatesse.Antal);
        }

         DataTable dtAll = new DataTable();
         dtAll = dataTable.Copy();
         dtAll.Merge(dataTable1, true);
         dtAll.Merge(dataTable2, true);

                conn.Open();

        foreach (DataRow row in dtAll.Rows)
        {
            cmd.CommandText = @"INSERT INTO ordre_linie 
                                (fk_ordre_id, fk_frugt_id, fk_deli_id, fk_groent_id, antal) 
                                VALUES (@fk_ordre, @fk_frugt_id, @fk_deli_id, @fk_groent_id, @Antal)";

            cmd.Parameters["@fk_frugt_id"].Value = row["FrugtID"];
            cmd.Parameters["@fk_deli_id"].Value = row["DeliID"];
            cmd.Parameters["@fk_groent_id"].Value = row["GroentID"];
            cmd.Parameters["@Antal"].Value = row["Antal"];

            

            cmd.ExecuteNonQuery();
        }
       
        conn.Close();
        Session.Abandon();
        Response.Redirect("tak.aspx");



       
        
       
    }


Hope someone could help me.

/Tina
Posted
Updated 15-Oct-13 22:43pm
v2
Comments
ranukamadushan 15-Oct-13 22:41pm    
Can you post the error which you are getting?
tina_overgaard 16-Oct-13 4:32am    
Cannot insert the value NULL into column 'fk_deli_id', table 'C:\USERS\TINAW\DESKTOP\SNUP1FRUGTWEB\APP_DATA\DATABASE.MDF.dbo.ordre_linie'; column does not allow nulls. INSERT fails.
The statement has been terminated.

Line 212:
Line 213:
Line 214: cmd.ExecuteNonQuery();
Line 215: }
Line 216:
bitofweb 16-Oct-13 1:45am    
Hi Tina,
1. There is a column mismatch in your loops. You are continuosly adding values to datatable1, although you have declared datatable2 also.
2. Try not to give the names to datatables.
Hope this will solve your problem.
tina_overgaard 16-Oct-13 4:44am    
I have edited the mismatch, but it still not getting the session values to the datatable

1 solution

Column mismatch in your for each loops
 
Share this answer
 

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900