Avatar billede simsen Mester
25. februar 2007 - 00:19 Der er 5 kommentarer og
1 løsning

Hente dato og sammenlign i en datatable

Hej,

Jeg har nedenviste kode, hvor jeg ingen fejl får......men jeg får så heller ikke det ud af den, jeg skal have.

I tabellen Meddelelser, har jeg 11 rækker med en dato større end 14/2/2007 men jeg får kun den første ud (den der er lig med meddelelsesid = 1).

Hvordan får jeg de rækker ud, som har en højere dato end 14/2/2007 (som på et tidspunkt bliver en indtastningsfelt brugeren kan indtaste)?

Min kode:

//Henter meddelelser fra Meddelelser
    public FStatus GetMessages(DateTime Meddelelsesdato, ref DataTable welcomemessage)
    {
        FStatus status = FStatus.Failure;

        DataRow r = null;
        DataTable AItems = new DataTable();

        try
        {
            AItems.Columns.Add(new DataColumn("MeddelelseId", Type.GetType("System.String")));
            AItems.Columns.Add(new DataColumn("MeddelelsesOverskrift", Type.GetType("System.String")));
            AItems.Columns.Add(new DataColumn("Meddelelsestekst", Type.GetType("System.String")));
            AItems.Columns.Add(new DataColumn("Meddelelsesdato", Type.GetType("System.String")));

            command.CommandText = "SELECT MeddelelseId, MeddelelsesOverskrift, Meddelelsestekst, Meddelelsesdato FROM Meddelelser WHERE MeddelelseId = 1 OR Meddelelsesdato >= @Meddelelsesdato";

            //command.Parameters.Clear();
            command.Parameters.AddWithValue("@Meddelelsesdato", Meddelelsesdato);

            OleDbDataReader myReader = command.ExecuteReader();

            //går gennem tabellen og lægger ind i rækker
            while (myReader.Read())
            {
                r = AItems.NewRow();

                try
                {
                    r["MeddelelseId"] = (myReader["MeddelelseId"]);
                    r["MeddelelsesOverskrift"] = (myReader["MeddelelsesOverskrift"]);
                    r["Meddelelsestekst"] = (myReader["Meddelelsestekst"]);
                    r["Meddelelsesdato"] = (myReader["Meddelelsesdato"]);
                }
                catch
                { }

                //Tilføjer rækken til datatable
                AItems.Rows.Add(r);
            }

            myReader.Close();
            welcomemessage = AItems;
            status = FStatus.Success;
        }
        catch
        { }

        return status;
    }

protected void Page_Load(object sender, EventArgs e)
    {
        FaktureringApi api = new FaktureringApi();
        int user_id = Convert.ToInt32(Session[FaktureringApi.SessionUserId]);

        DataTable messages = null;

        if (api.GetMessages((new DateTime(2007, 2, 14, 15, 00, 00, 00)), ref messages) == FaktureringApi.FStatus.Success)
        {
            grdMessages.DataSource = messages.DefaultView;
            grdMessages.DataBind();
        }

        api.Dispose();       
    }

Mvh
simsen :-)
Avatar billede simsen Mester
25. februar 2007 - 00:20 #1
Hov glemte lige at sige - jeg selv tror det har noget at gøre med selve select kommandoen at gøre;

command.CommandText = "SELECT MeddelelseId, MeddelelsesOverskrift, Meddelelsestekst, Meddelelsesdato FROM Meddelelser WHERE MeddelelseId = 1 OR Meddelelsesdato >= @Meddelelsesdato";
Avatar billede kalp Novice
25. februar 2007 - 00:47 #2
command.CommandText = "SELECT MeddelelseId, MeddelelsesOverskrift, Meddelelsestekst, Meddelelsesdato FROM Meddelelser WHERE Meddelelsesdato >= @Meddelelsesdato AND MeddelelseId = 1";
Avatar billede kalp Novice
25. februar 2007 - 01:33 #3
command.CommandText = "SELECT MeddelelseId, MeddelelsesOverskrift, Meddelelsestekst, Meddelelsesdato FROM Meddelelser WHERE Meddelelsesdato >= @Meddelelsesdato;

skal bare være sådan hvis du skal fjerne det med id.
Avatar billede simsen Mester
25. februar 2007 - 08:02 #4
Hejsa gawi

Jeg har formuleret mig forkert.

Jeg skal have den række i tabellen der har MeddelelsesId = 1 - Derudover skal jeg have alle de rækker, hvor meddelelsesdato er større end eller lig med Inputfeltet (som jeg pt har sat som en fast variabel til 14/2/2007 (new DateTime(2007, 2, 14, 15, 00, 00, 00)

Og det må altså have noget med Meddelelsesdato >= @Meddelelsesdato i CommandText at gøre - for forsøger jeg at bruge følgende:

command.CommandText = "SELECT MeddelelseId, MeddelelsesOverskrift, Meddelelsestekst, Meddelelsesdato FROM Meddelelser WHERE Meddelelsesdato >= @Meddelelsesdato;

for jeg ingen rækker ud overhovedet......

Er det et eller andet med, der skal noget specielt til for at sammenligne på dato?

mvh
simsen :-)
Avatar billede dr_chaos Nybegynder
25. februar 2007 - 08:41 #5
Hvis det er en sql server som er dit datalager kan du prøve med 
command.CommandText = "SELECT MeddelelseId, MeddelelsesOverskrift, Meddelelsestekst, Meddelelsesdato FROM Meddelelser WHERE (MeddelelseId = 1 OR CONVERT(VARCHAR(10),Meddelelsesdato,105) >= CONVERT(VARCHAR(10),@Meddelelsesdato),105)";
Avatar billede simsen Mester
25. februar 2007 - 15:11 #6
Hej dr_chaos

Det er det ikke, men fandt selv frem til hvad der var problemet:

command.CommandText = "SELECT MeddelelseId, MeddelelsesOverskrift, Meddelelsestekst, Meddelelsesdato FROM Meddelelser WHERE MeddelelseId = 1 OR ((Meddelelsesdato >= @Meddelelsesdato)) ORDER BY Meddelelsesdato DESC";

Altså der manglede nogle paranteser

Mange tak for forsøget på at hjælpe mig til jer begge

mvh
simsen :-)
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