Avatar billede nielsen2002 Nybegynder
31. august 2006 - 10:36 Der er 8 kommentarer og
1 løsning

lidt c# problemer

Hejsa.

Jeg er begyndt at kode lidt c#, og har lidt problemer med at få en funktion til at virke. det er den her.

public string TestFunktion()
    {
        string strSQL2 = "SELECT tekst FROM TestTabel;";

        OleDbConnection myConn = new OleDbConnection(strConn);
        OleDbCommand myCmd = new OleDbCommand(strSQL2, myConn);

        OleDbDataReader objDR = myCmd.ExecuteReader();
             

        string result;

        if ((objDR.Read() == true))
        {
          result = (objDR("tekst"));
        }

        return result;   

    }

men jeg får følgende fejl:

CS0118: 'objDR' is a 'variable' but is used like a 'method'

hvad kan der være galt?
Avatar billede nielle Nybegynder
31. august 2006 - 10:41 #1
Sådan:

        public string TestFunktion()
        {
            string strSQL2 = "SELECT tekst FROM TestTabel;";

            OleDbConnection myConn = new OleDbConnection(strConn);
            OleDbCommand myCmd = new OleDbCommand(strSQL2, myConn);

            OleDbDataReader objDR = myCmd.ExecuteReader();


            string result;

            if (objDR.Read() == true)
            {
                result = objDR.GetString(0);
            }

            return result;
        }
Avatar billede nielle Nybegynder
31. august 2006 - 10:41 #2
Husk at kalde Close() på din reader.
Avatar billede nielsen2002 Nybegynder
31. august 2006 - 10:43 #3
jeg tror det virkede. men nu får jeg en anden fejl.

CS0165: Use of unassigned local variable 'result'.


i linien:

return result;
Avatar billede nielle Nybegynder
31. august 2006 - 10:44 #4
Ja, hvis du ikke har noget data i din tabel, så vil den brokke sig over at result aldrig bliver tilddelt nogen værdi:

        public string TestFunktion()
        {
            string strSQL2 = "SELECT tekst FROM TestTabel;";

            OleDbConnection myConn = new OleDbConnection(strConn);
            OleDbCommand myCmd = new OleDbCommand(strSQL2, myConn);

            OleDbDataReader objDR = myCmd.ExecuteReader();

            string result = "Default resultat.";
            if (objDR.Read())
            {
                result = objDR.GetString(0);
            }
            objDR.Close();

            return result;
        }
Avatar billede nielle Nybegynder
31. august 2006 - 10:46 #5
Nu kan det jo sagtens tænkes at du *ved* at du har data i tabellen. Men det ved C#-kompileren jo ikke, og den brokker sig derfor over at der er en mulig fejlkilde fordi at result altså ikke nødvendigvis får en værdi.
Avatar billede nielsen2002 Nybegynder
31. august 2006 - 10:46 #6
okay.

Nu har jeg prøvet at give den en værdi sådan her

result = "værdi" + objDR.GetString(0);

men får samme fejl
Avatar billede nielle Nybegynder
31. august 2006 - 10:48 #7
Det er ikke nok at gøre de inden for i if'en:

            string result;
            if (objDR.Read())
            {
                result = "værdi" + objDR.GetString(0);
            }

Problemet er jo netop at det ikke er sikkert at det inde i if'en overhovedet bliver kørt (hvis der ikke er data i tabellen).
Avatar billede nielsen2002 Nybegynder
31. august 2006 - 10:50 #8
ahh..

du har ret :)

det virker når jeg giver 'result' en værdi uden for If sætningen.

Send et svar så får du kage.

MVH
Avatar billede nielle Nybegynder
31. august 2006 - 10:53 #9
Du må også gåre det sådan her:

        public string TestFunktion()
        {
            string strSQL2 = "SELECT tekst FROM TestTabel;";

            OleDbConnection myConn = new OleDbConnection(strConn);
            OleDbCommand myCmd = new OleDbCommand(strSQL2, myConn);

            OleDbDataReader objDR = myCmd.ExecuteReader();

            string result;
            if (objDR.Read())
                result = objDR.GetString(0);
            else
                result = "Default resultat.";

            objDR.Close();

            return result;
        }

Dette skyldes at det er 100% sikkert at enten if'en eller dens else-del bliver udført. Derfor er der garanti for at result altid får en værdi.


... og et svar for kage :^)
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