Avatar billede xitmorph Nybegynder
31. maj 2005 - 13:35 Der er 13 kommentarer og
1 løsning

Ordreform i C#.NET fejler..

er der en der kan se hvad der er galt her ? :

using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
using System.Security;


namespace EbyteSolutions
{
    /// <summary>
    /// Summary description for Kundeoplysninger.
    /// </summary>
    public class Kundeoplysninger : System.Web.UI.Page
    {
        protected System.Web.UI.WebControls.Image Image1;
        protected System.Web.UI.UserControl ucShoppingCart;
        protected System.Web.UI.WebControls.TextBox txtFornavn;
        protected System.Web.UI.WebControls.TextBox txtEfternavn;
        protected System.Web.UI.WebControls.TextBox txtAdresse;
        protected System.Web.UI.WebControls.TextBox txtPostnummer;
        protected System.Web.UI.WebControls.TextBox txtByen;
        protected System.Web.UI.WebControls.TextBox txtEmail;
        protected System.Web.UI.WebControls.TextBox txtBrugernavn;
        protected System.Web.UI.WebControls.TextBox txtPassword;
        protected System.Web.UI.WebControls.Button Confirm;
        protected System.Data.SqlClient.SqlConnection connection;
        protected System.Data.SqlClient.SqlDataAdapter db;
        protected System.Data.SqlClient.SqlCommandBuilder cmdBuilder;
       
       
       
           
        private void Page_Load(object sender, System.EventArgs e)
        {
            // Put user code to initialize the page here
        }

        #region Web Form Designer generated code
        override protected void OnInit(EventArgs e)
        {
            //
            // CODEGEN: This call is required by the ASP.NET Web Form Designer.
            //
            InitializeComponent();
            base.OnInit(e);
        }
       
        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        private void InitializeComponent()
        {   
            this.Confirm.Click += new System.EventHandler(this.Confirm_Click);
            this.Load += new System.EventHandler(this.Page_Load);

        }
        #endregion

        private void Confirm_Click(object sender, System.EventArgs e)
        {
            if (IsValid)
            {
                SqlCommand cmd;
                DataSet ordreDataSet = new DataSet();
                connection = new SqlConnection();
                connection.ConnectionString = "server=server;uid=user;pwd=pass;database=database";

                string sql = "SELECT * FROM Kunder WHERE Fornavn='" + txtFornavn.Text +"' AND Efternavn=' " + txtEfternavn.Text + " ' AND Adresse=' " + txtAdresse.Text + " ' AND Postnummer=' " + txtPostnummer.Text + " ' AND Bynavn=' " + txtByen.Text + " ' AND Email=' " + txtEmail.Text + " ' AND Brugernavn=' " + txtBrugernavn.Text + " ' AND Password=' " + txtPassword.Text + " ' ";
               
                SqlDataAdapter db = new SqlDataAdapter(sql, connection);
                SqlCommandBuilder cmdBuilder = new SqlCommandBuilder(db);

                connection.Open();
                db.Fill(ordreDataSet, "Kunder");
                DataTable kunder = ordreDataSet.Tables["Kunder"];
                DataRow kunde;
       
                if (kunder.Rows.Count == 0)
                {
                    kunde = kunder.NewRow();
                    kunde["Fornavn"]                    = txtFornavn.Text;
                    kunde["Efternavn"]                    = txtEfternavn.Text;
                    kunde["Adresse"]                    = txtAdresse.Text;
                    kunde["PostNummer"]            = txtPostnummer.Text;
                    kunde["Bynavn"]                        = txtByen.Text;
                    kunde["Email"]                        = txtEmail.Text;
                    kunde["Brugernavn"]                = txtEmail.Text;
                    kunde["Password"]                    = txtPassword.Text;

                    kunder.Rows.Add(kunde);

                    db.Update(ordreDataSet, "Kunder");
                       
                    cmd = new SqlCommand("SELECT  @@IDENTITY", connection);
                    kunde["KundeID"] = (Decimal) cmd.ExecuteScalar();

                    ordreDataSet.AcceptChanges();
                }

                else

                    kunde = kunder.Rows[0];

                db.SelectCommand.CommandText = "SELECT * FROM Ordre WHERE 1=0";

                cmdBuilder.RefreshSchema();

                db.Fill(ordreDataSet, "Ordre");

                DataTable ordre = ordreDataSet.Tables["Ordre"];

                DataRow ordreRow = ordre.NewRow();               
           
                ordreRow["KundeID"]            = kunde["KundeID"];
                ordreRow["OrdreDato"]        = DateTime.Now;

                ordre.Rows.Add(ordreRow);

                db.Update(ordreDataSet, "ordre");

                cmd = new SqlCommand("SELECT @@IDENTITY", connection);
                ordreRow["OrdreID"]= (Decimal) cmd.ExecuteScalar();

                ordreDataSet.AcceptChanges();

                db.SelectCommand.CommandText = "SELECT * FROM OrdreDetaljer WHERE 1=0";
                cmdBuilder.RefreshSchema();
                db.Fill(ordreDataSet, "OrdreDetaljer");

                DataTable ordreDetaljer = ordreDataSet.Tables["OrdreDetaljer"];

                DataTable shoppingCart = ((DataTable)Session["ShoppingCart"]);

                foreach (DataRow row in shoppingCart.Rows)
                {
                    DataRow ordreDetaljeRow = ordreDetaljer.NewRow();

                    ordreDetaljeRow["OrdreID"] = ordreRow["OrdreID"];
                    ordreDetaljeRow["VareID"]    = row["VareID"];

                    ordreDetaljer.Rows.Add(ordreDetaljeRow);
                }
       
                db.Update(ordreDataSet, "OrdreDetaljer");
                ordreDataSet.AcceptChanges();

                Response.Redirect("confirm.aspx");
            }

        }
    }
}
Avatar billede thomashove Nybegynder
31. maj 2005 - 14:33 #1
og fejlmeddelelsen er.....hvad?
Avatar billede xitmorph Nybegynder
31. maj 2005 - 15:26 #2
Cannot insert the value NULL into column 'OrdreID', table 'ebytesolution.dbo.Ordre'; column does not allow nulls. INSERT fails. The statement has been terminated

Linje 125:                ordre.Rows.Add(ordreRow);
Linje 126:
Linje 127:                db.Update(ordreDataSet, "ordre");
Linje 128:
Linje 129:                cmd = new SqlCommand("SELECT @@IDENTITY", connection);
Avatar billede xitmorph Nybegynder
31. maj 2005 - 15:27 #3
Staksporing:


[SqlException: Cannot insert the value NULL into column 'OrdreID', table 'ebytesolution.dbo.Ordre'; column does not allow nulls. INSERT fails.
The statement has been terminated.]
  System.Data.Common.DbDataAdapter.Update(DataRow[] dataRows, DataTableMapping tableMapping) +1660
  System.Data.Common.DbDataAdapter.Update(DataSet dataSet, String srcTable) +152
  EbyteSolutions.Kundeoplysninger.Confirm_Click(Object sender, EventArgs e) in c:\inetpub\wwwroot\ebytesolutions\kundeoplysninger.aspx.cs:127
  System.Web.UI.WebControls.Button.OnClick(EventArgs e) +108
  System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +57
  System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +18
  System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +33
  System.Web.UI.Page.ProcessRequestMain() +1292
Avatar billede xitmorph Nybegynder
31. maj 2005 - 18:21 #4
ja ok.. der var ikke mange der kunne hjælpe..
Avatar billede snepnet Nybegynder
31. maj 2005 - 18:26 #5
hehe.... har først set spørgsmålet nu, og har ikke fået nogen mail om det - så sådan er det nok også for andre :o)
mvh
Avatar billede snepnet Nybegynder
31. maj 2005 - 18:33 #6
men udover det - så tror jeg du bliver nødt til at sætte ordreid som primærnøgle på tabellen - autoinkrementerende og med step = -1 (så du ikke kommer i karambolage med nøglerne der ligger i tabellen i forvejen.
hvis du så også sørger for at der laves en select i insert/update, kan du få sat de rigtige værdier i ordreid-kolonnen uden at lave en eksplicit select @@IDENTITY efterfølgende....
mvh
Avatar billede snepnet Nybegynder
31. maj 2005 - 18:40 #7
Det her er f.eks. sådan en procedure som vs finder på at generere  :

SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO

CREATE PROCEDURE dbo.CauseInsert
(
    @Name nvarchar(50),
    @Description nvarchar(255),
    @Active bit
)
AS
    SET NOCOUNT OFF;
INSERT INTO Cause(Name, Description, Active) VALUES (@Name, @Description, @Active);
    SELECT CauseId, Name, Description, Active FROM Cause WHERE (CauseId = @@IDENTITY)
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

og resultatet af den (hvis du bruger den i forbindelse med adaptere og datasets) at du får sat de opdaterede værdier in i tabellen i datasettet - hvorved også dit id fra basen så vil stå der.

det kan være meget praktisk sådan.

mvh
Avatar billede xitmorph Nybegynder
31. maj 2005 - 20:07 #8
tak for henvendelsen.. jeg prøvet at lave om på mine keys.. og nu siger den at: Objektreferencen er ikke indstillet til en forekomst af et objekt.
Beskrivelse: Der opstod en ikke-afviklet undtagelse under udførelse af den aktuelle webanmodning. Se staksporingen for at få yderligere oplysninger om fejlen, og hvor den kom fra i koden.

Detaljer om undtagelse: System.NullReferenceException: Objektreferencen er ikke indstillet til en forekomst af et objekt.
Avatar billede xitmorph Nybegynder
31. maj 2005 - 20:07 #9
DataTable ShoppingCart = ((DataTable)Session["shoppingCart"]);
Linje 141:
Linje 142:                foreach (DataRow row in ShoppingCart.Rows)
Linje 143:                {
Linje 144:                    DataRow ordreDetaljeRow = ordreDetaljer.NewRow();
Avatar billede snepnet Nybegynder
31. maj 2005 - 22:38 #10
jeg synes heller ikke jeg kan få øje på at du lægger noget i en sessionvariabel med den kode du har sendt - og det er formegentlig der det går galt.
hvornår lægger du noget i den variabel ?
mvh
Avatar billede xitmorph Nybegynder
01. juni 2005 - 09:05 #11
ok sagen er: Jeg har en varekurv med nogle varer som ligger i en UC. Når jeg trykker [Ok] ryger den til kundeoplysninger.aspx hvor den stadig indeholder Sessionen. Meningen er at den skal update Ordre tabellen med OrdreID, KundeID, OrdreDato & Tabellen Ordredetaljer med OrdreID, VareID. Jeg er kommet så langt at den laver ordretabellen med dato, kundeid osv, men den laver intet i Ordredetaljer tabellen, selvom det burde virke..håber du kan hjælpe mig.. jeg er sq lidt lost..
Avatar billede snepnet Nybegynder
29. juni 2005 - 21:00 #12
har du stadig ballade her xitmorph ?
mvh
snep
Avatar billede xitmorph Nybegynder
30. juni 2005 - 10:06 #13
nej jeg har lavet det hele om.. så den kører med stored procedures i stedet.. men tak for hjælpen alligevel.. læg lige et svar :-)
Avatar billede snepnet Nybegynder
30. juni 2005 - 10:20 #14
jamen det får du da så :o)
mvh
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester