Avatar billede tinaw25 Nybegynder
24. oktober 2013 - 14:57 Der er 6 kommentarer og
1 løsning

Hvad i alverden gør jeg forkert, kan slet ikke finde fejlen??

Hej

Når jeg har lagt ordre i databasen skal den sende en mail. Jeg har brugt den i et andet projekt og kopieret den inde, og jeg har kørt debug og det hele ser fint ud.

Den ligger det også i databasen, men sender bare ikke en email og kan simpelthen ikke gennemskue hvad min fejl er??

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;
        cmd.Parameters.Add("@kurv", SqlDbType.Int).Value = 0;
        cmd.Parameters.Add("@antal", SqlDbType.VarChar).Value = 0;

        List<ValgtDeli> valgteDeli = (List<ValgtDeli>)Session["ValgteDeli"];


        var dataTable1 = new DataTable(Session["ValgteDeli"].ToString());

        dataTable1.Columns.Add("ID", typeof(int));
        dataTable1.Columns.Add("Navn", typeof(string));
        dataTable1.Columns.Add("Antal", typeof(int));
        dataTable1.Columns.Add("Vaerdi", typeof(int));

        foreach (ValgtDeli delikatesse in valgteDeli)
        {
            dataTable1.Rows.Add(delikatesse.ID, delikatesse.Navn, delikatesse.Antal, delikatesse.Vaerdi);
        }

        conn.Open();

        string body = "";
        body += "Indholdet af ordren er af Lille Mix kasse";
        body += "<Table>";
        body += "<th>";
        body += "Ordre nr";
        body += "</th>";
        body += "<th>";
        body += "Antal";
        body += "</th>";
        body += "<th>";
        body += "Navn";
        body += "</th>";

        foreach (DataRow row in dataTable1.Rows)
        {
            cmd.CommandText = @"INSERT INTO ordre_linie
                                (fk_ordre_id, navn, fk_kurve_id, antal)
                                VALUES (@fk_ordre, @navn, @kurv, @antal)";




            cmd.Parameters["@navn"].Value = row["Navn"];
            cmd.Parameters["@kurv"].Value = 3;
            cmd.Parameters["@antal"].Value = row["Antal"];

            body += "<tr>";
            body += "<td>";
            body += cmd.Parameters["@fk_ordre"].Value = orderId;
            body += "</td>";

            body += "<td>";
            body += cmd.Parameters["@Antal"].Value = row["Antal"];
            body += "</td>";


            body += "<td>";
            body += cmd.Parameters["@navn"].Value = row["Navn"];
            body += "</td>";

            body += "</tr>";

            cmd.ExecuteNonQuery();
        }

        body += "</Table>";
        body += "<table>";

        body += "<tr>";
        body += "<td>";
        body += cmd.Parameters["@navn"].Value = TextBox_navn.Text += cmd.Parameters["@efternavn"].Value = TextBox_efternavn.Text;
        body += "</td>";
        body += "</tr>";

        body += "<tr>";
        body += "<td>";
        body += cmd.Parameters["@adresse"].Value = TextBox_adresse.Text;
        body += "</td>";
        body += "</tr>";

        body += "<tr>";
        body += "<td>";
        body += cmd.Parameters["@postnr"].Value = TextBox_postnr.Text += cmd.Parameters["@bynavn"].Value = TextBox_by.Text;
        body += "</td>";
        body += "</tr>";

        body += "<tr>";
        body += "<td>";
        body += cmd.Parameters["@mobil"].Value = TextBox_mobil.Text;
        body += "</td>";
        body += "<td>";
        body += "</tr>";

        body += "<tr>";
        body += cmd.Parameters["@mail"].Value = TextBox_mail.Text;
        body += "</td>";
        body += "</tr>";
        body += "</Table>";


        //now set up the mail settings
        MailMessage message = new MailMessage();
        message.From = new MailAddress(TextBox_mail.Text);
        //can add more recipient
        message.To.Add(new MailAddress("tina@willum-design.dk"));

        //add cc
        message.CC.Add(new MailAddress(TextBox_mail.Text));

        message.Subject = "Du har modtaget en ordre";

        message.Body = body;
        message.IsBodyHtml = true;
        SmtpClient client = new SmtpClient();

        client.Host = "asmtp.unoeuro.com";

        client.Port = 25;

        client.Credentials = new System.Net.NetworkCredential("min email", "xxxx");

        client.EnableSsl = true;

        conn.Close();
        Session.Clear();
        Session.Abandon();
        Session.RemoveAll();


        conn.Close();

        Response.Redirect("tak.aspx");
Avatar billede Spotgun Seniormester
24. oktober 2013 - 15:09 #1
Det ser ud til at du kun mangler at sende beskeden. Prøv at smide følgende linie ind, umiddelbart efter "client.EnableSsl = true;":

client.Send(message);
Avatar billede tinaw25 Nybegynder
24. oktober 2013 - 15:12 #2
Lige nøjagtig det takker
Avatar billede Spotgun Seniormester
24. oktober 2013 - 15:13 #3
Det var så lidt.
Avatar billede arne_v Ekspert
28. oktober 2013 - 03:36 #4
spotgun hare loest dit problem, men jeg vil lige komme med et par kommentarer til koden:

1) metoden er meget lang - hvis du deler den op i nogle forskellige metoder vil den blive meget nemmere at laese.

F.eks. kunne du lade din metode kalde foelgende metoder:

InsertInOrdre
InsertInOrdreLine
AppendToEmailBody
SendEmail

2) du kunne ogsaa goere koden mere laesebar ved at bruge String Format fremfor body +=.

Eksempel:

using System;

namespace E
{
    public class Program
    {
        private const string TABLE_TEMPLATE =
@"<table>
{0}</table>
";
        private const string TR_TEMPLATE =
@"<tr>
<td>{0}</td>
<td>{1}</td>
</tr>
";
        public static void Main(string[] args)
        {
            string body = "<table>\r\n";
            for(int i = 0; i < 5; i++)
            {
                body += "<tr>\r\n";
                body += "<td>";
                body += i.ToString();
                body += "</td>\r\n";
                body += "<td>";
                body += ("X" + i);
                body += "</td>\r\n";
                body += "</tr>\r\n";
            }
            body += "</table>\r\n";
            Console.WriteLine(body);
            string alltd = "";
            for(int i = 0; i < 5; i++)
            {
                alltd += String.Format(TR_TEMPLATE, i, "X" + i);
            }
            string bodyalt = String.Format(TABLE_TEMPLATE, alltd);
            Console.WriteLine(bodyalt);
            Console.ReadKey();
        }
    }
}
Avatar billede tinaw25 Nybegynder
28. oktober 2013 - 09:56 #5
Hej Arne

Når man ligger dem ind i metoder, bliver koderne så kørt hurtigere end hvis man laver en lang som jeg har gjort??
Avatar billede arne_v Ekspert
28. oktober 2013 - 13:24 #6
Nej. Men det er langt nemmere at overskue koden og dermed vedligeholde den.
Avatar billede tinaw25 Nybegynder
28. oktober 2013 - 13:32 #7
Okay, den er noteret. Takker
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