Avatar billede milandt Nybegynder
08. november 2005 - 11:54 Der er 5 kommentarer og
1 løsning

Query med random row, virker ikke i c#

Hej,

Jeg har lavet en query i Access der skal returnere en enkelt random række. Jeg har brugt denne fremgangsmåde: http://support.microsoft.com/kb/287682/EN-US/

Det virker fint når jeg kører queryen i Access, men når jeg prøver at execute queryen fra mit c# projekt, så får jeg altid den første row, uanset hvad.

Query:
SELECT TOP 1 Banners.BannerId, Banners.ImageUrl, Banners.Href, Banners.Target, Campains.CampainId
FROM Banners INNER JOIN (Campains INNER JOIN Users ON Campains.UserID = Users.UserId) ON Banners.CampainId = Campains.CampainId
WHERE (((Campains.Credits)>0))
ORDER BY Rnd(Len([Campains.CampainId]));

C#
        public Banner()
        {
            _dbConnection = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\\web\\gbads\\data\\gbads.mdb");
            getBanner(_dbConnection);
        }

        public void getBanner(OleDbConnection connection)
        {
            OleDbCommand command = new OleDbCommand("exec getBanner", connection);
       
            connection.Open();
           
            OleDbDataReader reader = command.ExecuteReader();
            reader.Read();
           
            Id = reader.GetGuid(0).ToString();
            ImageUrl = reader.GetString(1).ToString();
            Href = (!reader.IsDBNull(3) ? reader.GetString(2) : "");
            Target = (!reader.IsDBNull(3) ? reader.GetString(3) : "");
            CampainId = reader.GetGuid(4).ToString();

            connection.Close();
             
        }


Hvorfor kan jeg ikke få denne random row når jeg executer min query fra C#? Hvis det ikke kan lade sig gøre, hvilken måde er så den bedste?
Avatar billede ldanielsen Nybegynder
08. november 2005 - 12:23 #1
OleDbCommand command = new OleDbCommand("exec getBanner", connection);


"exec getBanner", hvordan ser getBanner ud ?
Avatar billede milandt Nybegynder
08. november 2005 - 12:26 #2
Det er den query jeg har skrevet oven over C# koden. Skulle måske have skrevet at det var den der hed getBanner.
Avatar billede ldanielsen Nybegynder
08. november 2005 - 12:40 #3
Laver ikke selv dotnet, så kan ikke teste, men hvad sker der hvis du skriver:

OleDbCommand command = new OleDbCommand("SELECT * FROM getBanner", connection);
Avatar billede milandt Nybegynder
08. november 2005 - 12:43 #4
Samme resultat - den får en row tilbage, og altid den første.
Avatar billede ldanielsen Nybegynder
08. november 2005 - 12:52 #5
Sorry, ingen anelse om hvad der sker.

Det kunne virke som om random-generatoren ikke bliver aktiveret af det kald du laver.
Avatar billede milandt Nybegynder
08. november 2005 - 16:35 #6
Fandt en løsning på problemet, lidt i stil med dette: http://www.adopenstatic.com/faq/randomrecord.asp
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
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

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