1 Replies - 1041 Views - Last Post: 18 October 2013 - 07:18 AM Rate Topic: -----

#1 tinaw25  Icon User is offline

  • New D.I.C Head

Reputation: 0
  • View blog
  • Posts: 1
  • Joined: 16-October 13

Error: Cannot insert the value NULL into column?

Posted 16 October 2013 - 03:09 AM


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??

I get this error:

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.

 protected void Button_putikurv_Click(object sender, EventArgs e)

        int totalvaerdi = 0;

        List<ValgtDeli> valgteDeli = new List<ValgtDeli>(); //Her laver jeg en liste over valgte frugter. Det er et nyt objekt, som kan indeholde påde ID, Navn, Antal og Værdi

        foreach (RepeaterItem item in VisDeli.Items)
            if (item.ItemType == ListItemType.Item || item.ItemType == ListItemType.AlternatingItem)
                    TextBox TextBox_deli = item.FindControl("TextBox_deli") as TextBox;

                string DeliNavn = TextBox_deli.Attributes["DeliNavn"]; //Det her skal vel være en streng!?

                if (TextBox_deli.Text != null)

                    if (string.IsNullOrEmpty(TextBox_deli.Text))
                        TextBox_deli.Text = "0";


                int enkeltDeliAntal = int.Parse(TextBox_deli.Text);

                totalvaerdi += (enkeltDeliAntal);

                if (enkeltDeliAntal > 0)
                    ValgtDeli frugtenDerskalTilfoejes = new ValgtDeli(); //Opret frugten og angiv værdier
                    frugtenDerskalTilfoejes.DeliNavn = DeliNavn;
                    frugtenDerskalTilfoejes.Antal = enkeltDeliAntal;


            if (totalvaerdi > 0)
                Session["ValgteDeli"] = valgteDeli;


    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;

        object orderId = cmd.ExecuteScalar();

        //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);


        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"];



Is This A Good Question/Topic? 0
  • +

Replies To: Error: Cannot insert the value NULL into column?

#2 h4nnib4l  Icon User is offline

  • The Noid
  • member icon

Reputation: 1176
  • View blog
  • Posts: 1,662
  • Joined: 24-August 11

Re: Error: Cannot insert the value NULL into column?

Posted 18 October 2013 - 07:18 AM

Okay, so what is your error message telling you? The the value row["DeliID"] is going into the parameter @fk_deli_id as null, right? You need to set a breakpoint at the start of the foreach loop at line 151 (of the pasted code, not sure which line it would be in your IDE), and step through to check the values your are attempting to pass to into your query through the parameters.

However, your parameterization is suspect as well. I recommend using this syntax: cmd.Parameters.AddWithValue("@MyParameter", myValue) to add the parameters; I've never used anything but the syntax I recommended so I'm not 100% sure, but I believe that you'd have to call cmd.Paremeters.Add("MyParameter") before you can try to assign a value. If you'll use the syntax I suggested, it won't be an issue.
Was This Post Helpful? 0
  • +
  • -

Page 1 of 1