12. maj 2007 - 13:03Der er
7 kommentarer og 1 løsning
Fejl ved variabel i select statement - SQL: Data type mismatch in
Hej,
Jeg har følgende selectstatement, hvor den går i fejl, når jeg forsøger mig med @BrugerId i de to WHERE statements. Bruger jeg istedet 1 i dem begge, kommer den frem med de rigtige rækker fra databasen.
Når jeg kører selectstatement fra access databasen i en forespørgsel, kommer den frem med de rigtige rækker.....
Jeg HAR checket, at BrugerId i Bruger og GemteOpskrifter tabellerne er et langt heltal.....
Fejlen jeg får er SQL: Data type mismatch in criteria expression
Nogen der kan hjælpe mig...jeg er temmelig desperat - har forsøgt mig frem med diverse ting hele formiddagen....
Koden: public Status GetSeekSimpelSortNameMine(int BrugerId, string seekstring, ref DataTable SeekSimpel) { Status status = Status.Failure;
DataRow r = null; DataTable AItems = new DataTable();
OleDb ikke bruger ikke parameternavne ved CommandType Text men deres rækkefølge: Dvs du skal nok lave dig dette her: command.Parameters.Add(new OleDbParameter("@BrugerId1", BrugerId)); command.Parameters.Add(new OleDbParameter("@BrugerId2", BrugerId));
(hvor parameternavnene er der bare for at se hvad der sker)
For øjeblikket så prøver den desperat at aflæse den første BrugerID i din @seekstring (fordi den står først) og dette giver fejlen.
Jeg forsøger mig med nedenviste....den fremkommer ikke med fejl længere....Men den kommer heller ikke frem med de korrekte rækker (som jeg har testet i Access).... Nu tager den kun den(de) rækker med der er i anden select statement - alte WHERE BrugerId = @BrugerId2
Nogen flere gode ideer?
command.CommandText = "SELECT Opskrift.OpskriftId, Opskrift.OpskriftNavn, Opskrift.KategoriId, Opskrift.LandId, Opskrift.TemaId, Opskrift.MaaltidId, Opskrift.Tilberedningstid, Opskrift.BrugerId, Opskrift.Kilde, Opskrift.PortionStk, Opskrift.Protein, Opskrift.Fedt, Opskrift.Kulhydrat, Opskrift.Pris, Opskrift.BilledeNavn, Opskrift.Ingredienser, Opskrift.Fremgangsmaade, Opskrift.Servering, Opskrift.Fedtfattig, Opskrift.AntalVisninger, Opskrift.Offentlig, Opskrift.Dato, Opskrift.Print, Opskrift.Points, Opskrift.AntalPersonerAfgivetPoints, Bruger.BrugerNavn, Kategori.KategoriNavn FROM (Kategori INNER JOIN Opskrift ON Kategori.KategoriId=Opskrift.KategoriId) INNER JOIN Bruger ON Opskrift.BrugerId=Bruger.BrugerId WHERE (((Opskrift.BrugerId) = @BrugerId1)) UNION SELECT Opskrift.OpskriftId, Opskrift.OpskriftNavn, Opskrift.KategoriId, Opskrift.LandId, Opskrift.TemaId, Opskrift.MaaltidId, Opskrift.Tilberedningstid, Opskrift.BrugerId AS Opskrift_BrugerId, Opskrift.Kilde, Opskrift.PortionStk, Opskrift.Protein, Opskrift.Fedt, Opskrift.Kulhydrat, Opskrift.Pris, Opskrift.BilledeNavn, Opskrift.Ingredienser, Opskrift.Fremgangsmaade, Opskrift.Servering, Opskrift.Fedtfattig, Opskrift.AntalVisninger, Opskrift.Offentlig, Opskrift.Dato, Opskrift.Print, Opskrift.Points, Opskrift.AntalPersonerAfgivetPoints, Bruger.BrugerNavn, Kategori.KategoriNavn FROM Bruger INNER JOIN (Kategori INNER JOIN (Opskrift INNER JOIN GemteOpskrifter ON Opskrift.OpskriftId = GemteOpskrifter.OpskriftId) ON Kategori.KategoriId = Opskrift.KategoriId) ON Bruger.BrugerId = GemteOpskrifter.BrugerId WHERE (((GemteOpskrifter.BrugerId2)= @BrugerId))";
skal vist være (jeg kan ikke få øje på hvor du bruger din seekstring - hvis den ikke optræder så skal den væk): command.Parameters.Clear(); command.Parameters.Add(new OleDbParameter("@BrugerId1", BrugerId)); command.Parameters.Add(new OleDbParameter("@BrugerId2", BrugerId));
og i din select: (((GemteOpskrifter.BrugerId2)= @BrugerId))"; skal være (((GemteOpskrifter.BrugerId)= @BrugerId2))";
for hver gang der er en plads i din select, hvor data skal komme fra en parameter, så skal du have en tilsvarende parameter i parameterlisten - blot fordi du bruger navne betyder ikke at OleDb selv bruger navnene til noget :) - så, f.eks. for 6 steder i din select hvor der er plads til en parameter, skal der defineres 6 parametre i SAMME RÆKKEFØLGE - deres navne er ret ligegyldige, men variabletypen skal jo svare til det forventede. Dette gælder selv hvis det er samme værdi som skal bruges på nogle af pladserne - kig på det link fra før:)
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.