Avatar billede simsen Mester
16. november 2007 - 08:59 Der er 9 kommentarer og
1 løsning

Kan ikke hente det korrekte ud af databasen

Hejsa,

Den her er meget vigtig for mig, så håber en eller anden kan hjælpe mig.....

Jeg har to selects kommandoer - alt efter om product id er sat til 0 eller ej.

Min kode:
productId = 1;
            if (employeeId == 0)
            {
                //Hvis productId er sat til 0 skal alle producter vises
                if (productId == 0)
                {
                    connect.command.CommandText = "SELECT ErrorCyklus.errorMessageId, ErrorCyklus.errorcyklusidSub, ErrorCyklus.errorHeadline, Priority.priorityId, Priority.priority, Status.statusId, Status.status, ErrorMessage.errorMessage, ErrorMessage.errorReportDate, Product.productId, Product.productName, Product.productDescription FROM Status RIGHT JOIN (Priority RIGHT JOIN (ErrorMessage RIGHT JOIN (Patch RIGHT JOIN (Version RIGHT JOIN (Product RIGHT JOIN ErrorCyklus ON Product.productId=ErrorCyklus.productId) ON Version.versionId=ErrorCyklus.versionId) ON Patch.patchId=ErrorCyklus.patchId) ON ErrorMessage.errorMessageId=ErrorCyklus.errorMessageId) ON Priority.priorityId=ErrorCyklus.priorityId) ON Status.statusId=ErrorCyklus.status WHERE (ErrorCyklus.companyId = @companyId) AND (Status.statusId <> 6) AND (ErrorCyklus.errorcyklusidSub = 0)";
                }
                else
                {
                    connect.command.CommandText = "SELECT ErrorCyklus.errorMessageId, ErrorCyklus.errorcyklusidSub, ErrorCyklus.errorHeadline, Priority.priorityId, Priority.priority, Status.statusId, Status.status, ErrorMessage.errorMessage, ErrorMessage.errorReportDate, Product.productId, Product.productName, Product.productDescription FROM Status RIGHT JOIN (Priority RIGHT JOIN (ErrorMessage RIGHT JOIN (Patch RIGHT JOIN (Version RIGHT JOIN (Product RIGHT JOIN ErrorCyklus ON Product.productId=ErrorCyklus.productId) ON Version.versionId=ErrorCyklus.versionId) ON Patch.patchId=ErrorCyklus.patchId) ON ErrorMessage.errorMessageId=ErrorCyklus.errorMessageId) ON Priority.priorityId=ErrorCyklus.priorityId) ON Status.statusId=ErrorCyklus.status WHERE (ErrorCyklus.companyId = @companyId) AND (Status.statusId <> 6) AND (ErrorCyklus.errorcyklusidSub = 0) AND (ErrorCyklus.productId = @productId)";
                }
   
            }

Kører jeg den, hvor productId er sat til 0 - får jeg korrekt to rækker ud af databasen. Sætter jeg derimod productId til 1, får jeg ingen rækker udfra databasen (jeg skulle have én række ud).

Jeg har forsøgt at køre begge SELECTs i access databasen og der viser de hvad de skal, så det kan vel ikke være select kommandoen, der er et problem......men hvad er det så?

Det eneste forskel på de to rækker er:

AND (ErrorCyklus.productId = @productId)

Altså jeg tilføjer ovennævnte hvis productId ikke er 0....

Håber godt nok en eller anden kan hjælpe mig.......

mvh
simsen
Avatar billede Slettet bruger
16. november 2007 - 09:13 #1
og du kan copy paste din sql select fra access hvor det virker over i C# koden og så virker det ikke ?
- Når du debugger går den ind i metoden og der sker ingen exception.. ?
Avatar billede simsen Mester
16. november 2007 - 09:16 #2
Lige netop og ja den går ind i metoden og der sker ingen exception.......Det eneste jeg kan se, er at den ikke henter nogen rækker (den går ikke ind i min while løkke)....

Min while løkke:

OleDbDataReader myReader = connect.command.ExecuteReader();

            while (myReader.Read())
            {
                r = AItems.NewRow();

                try
                {
                    r["errorMessageId"] = (myReader["errorMessageId"]);
                    r["errorcyklusidSub"] = (myReader["errorcyklusidSub"]);
                    r["errorHeadline"] = (myReader["errorHeadline"]);
                    r["priorityId"] = (myReader["priorityId"]);
                    r["priority"] = (myReader["priority"]);
                    r["statusId"] = (myReader["statusId"]);
                    r["status"] = (myReader["status"]);
                    r["errorMessage"] = (myReader["errorMessage"]);
                    r["errorReportDate"] = (myReader["errorReportDate"]);
                    r["productId"] = (myReader["productId"]);
                    r["productName"] = (myReader["productName"]);
                    r["productDescription"] = (myReader["productDescription"]);
                }
                catch
                { }

                AItems.Rows.Add(r);
            }
Avatar billede simsen Mester
16. november 2007 - 09:20 #3
Når jeg kører den select kommando med fejlen i Access, sker der én ændring:

SELECT ErrorCyklus.errorMessageId, ErrorCyklus.errorcyklusidSub, ErrorCyklus.errorHeadline, Priority.priorityId, Priority.priority, Status.statusId, Status.status, ErrorMessage.errorMessage, ErrorMessage.errorReportDate, Product.productId, Product.productName, Product.productDescription FROM Status RIGHT JOIN (Priority RIGHT JOIN (ErrorMessage RIGHT JOIN (Patch RIGHT JOIN (Version RIGHT JOIN (Product RIGHT JOIN ErrorCyklus ON Product.productId=ErrorCyklus.productId) ON Version.versionId=ErrorCyklus.versionId) ON Patch.patchId=ErrorCyklus.patchId) ON ErrorMessage.errorMessageId=ErrorCyklus.errorMessageId) ON Priority.priorityId=ErrorCyklus.priorityId) ON Status.statusId=ErrorCyklus.status WHERE (ErrorCyklus.companyId = @companyId) AND (Status.statusId <> 6) AND (ErrorCyklus.errorcyklusidSub = 0) AND (ErrorCyklus.productId = [@productId]);

Altså den sætter firkantede paranteser udenom @productId.

Jeg har så forsøgt at copy/paste dette ind istedet for - men stadig får jeg ikke den række ud, som jeg gør i access.....
Avatar billede Slettet bruger
16. november 2007 - 09:22 #4
Tja så tror jeg godt nok ikke, at den finder nogen data :)

hvad hvis du nøjes med "SELECT * from ErrorCyklus where ErrorCyklus.productId = 1)"; finder den så noget.. ?
Avatar billede simsen Mester
16. november 2007 - 09:27 #5
Hvi jeg sætter den til 1 - så kommer min række frem......

Men som du også kan se i mit første indlæg sætter jeg:

productId = 1;

Så hvor går det galt?
Avatar billede Slettet bruger
16. november 2007 - 09:29 #6
jamen tilføjer du også denne værdi til parameterne ?
Avatar billede Slettet bruger
16. november 2007 - 09:33 #7
cmd.Parameters.AddWithValue("@productId", productId);
Avatar billede simsen Mester
16. november 2007 - 09:35 #8
Ja jeg gør så - men har fundet fejlen med din hjælp.......

Problemet lå ikke i productId - men i employeeId - jeg har 3 parametre ind - er employeeId sat til 0 - bruges den ikke........ Og access tilgang skal jo komme i korrekt rækkefølge - hvad der kommer ind, skal også sættes i samme rækkefølge i parametrene i samme rækkefølge - for at få det korrekte ud.....

Jeg har løst dette problem med:

connect.command.Parameters.Add(new OleDbParameter("@companyId", companyId));
            if (employeeId != 0)
            {
                connect.command.Parameters.Add(new OleDbParameter("@employeeId", employeeId));
            }
            connect.command.Parameters.Add(new OleDbParameter("@productId", productId));

og det ser ud til at virke......

Smid et svar og du får dine points........Dejligt med din feedback...ellers havde jeg ikke fået løst problemet sådan lige med det samme, tak :-)
Avatar billede Slettet bruger
16. november 2007 - 09:40 #9
hjæler altid at tale om det :)
Avatar billede simsen Mester
16. november 2007 - 09:43 #10
Lige netop - det mangler jeg lidt pt :-)
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