Avatar billede jokkejensen Novice
10. juni 2006 - 11:12 Der er 8 kommentarer og
2 løsninger

Kan en metode returnere forskellige typer ?

Hej..

Jeg er lidt grøn i C#.

Jeg har en metode der returnere en scalarvalue fra en database..:

        /// <summary>
        /// Getting string from database
        /// </summary>
        /// <param name="Odbc">SQL to be executed</param>
        /// <returns>DataTable</returns>
        public object getScalarValue(string Odbc)
        {
            //initializing
            object o = new object();

            //ensuring connection pooling
            using (MySqlConnection connection = new MySqlConnection(connectionString))
            {
                try
                {
                    HttpContext.Current.Trace.Write("DB", "Getting ScalarValue : " + Odbc);
                    MySqlCommand command = connection.CreateCommand();
                    command.CommandText = Odbc;
                    connection.Open();
                    o = command.ExecuteScalar();
                    connection.Close();
                    HttpContext.Current.Trace.Write("DB", "Returned Value : " + Convert.ToString(o));
                }
                catch (Exception exp)
                {
                    HttpContext.Current.Trace.Warn("DB", "Error Getting ScarlarValue : " + Odbc);
                }
            }

            return o;
        }


JEg havde så håbet på jeg kunne :

DB createUserDB = new DB();

        int userExcist;

        userExcist = System.Convert.ToInt32(createUserDB.getScalarValue("SELECT Count( * ) AS userNumber FROM `Users` WHERE username  '" + userName.Text + "'"));

Men får følgende fejl:
"Detaljer om undtagelse: System.InvalidCastException: Et objekt af typen 'System.Object' kan ikke konverteres til typen 'System.IConvertible'."

i linie :
Linje 36:        userExcist = System.Convert.ToInt32(createUserDB.getScalarValue("SELECT Count( * ) AS userNumber FROM `Users` WHERE username  '" + userName.Text + "'"));


Så sprøgsmålet lyder på.. kan man i min getscalarvalue metode, teste hvilken type execute.scalarvalue returnere, og returnere den, uden at skulle converterer den til en given type..

altså hvis ex det er en bool kan jeg så få min metode til at returnere en bool og ikke et object ?

på forhånd tak !

/JJ
Avatar billede Syska Mester
10. juni 2006 - 11:20 #1
Den vil altid returnere et Object... som du så skal caste til den type det nu er....

// ouT
Avatar billede jokkejensen Novice
10. juni 2006 - 11:21 #2
Men hvorfor får jeg den fejl ?

Jeg syntes før det er lykkedes mig at System.Convert.ToInt32() (når jeg er sikker på det er en int der returneres i objectet ?
Avatar billede nielle Nybegynder
10. juni 2006 - 12:24 #3
Du mangler et =-tegn i din SQL-sætning:

userExcist = System.Convert.ToInt32(createUserDB.getScalarValue("SELECT Count( * ) AS userNumber FROM `Users` WHERE username  '" + userName.Text + "'"));

- skal rettes til:

userExcist = System.Convert.ToInt32(createUserDB.getScalarValue("SELECT Count( * ) AS userNumber FROM `Users` WHERE username = '" + userName.Text + "'"));
Avatar billede nielle Nybegynder
10. juni 2006 - 13:44 #4
Ang. det oprindelige spørgsmål:

> Så sprøgsmålet lyder på.. kan man i min getscalarvalue metode, teste hvilken type execute.scalarvalue returnere, og returnere den, uden at skulle converterer den til en given type..
>
> altså hvis ex det er en bool kan jeg så få min metode til at returnere en bool og ikke et object ?

Nej, det er ikke muligt. Du får simpelthen en compile-fejl hvis du laver noget i stil med:

bool getScalarValue(string Odbc) { ... }
int getScalarValue(string Odbc) { ... }

Du kan kun gøre det ved, som buzzzz nævner, at typecaste det object du får returneret.
Avatar billede iakob Nybegynder
15. juni 2006 - 11:10 #5
Hvorfor returnerer du ikke en System.IConvertible? Det skulle gøre tricket, men jeg ville nok sætte et try-catch omkring alligevel.
Avatar billede jokkejensen Novice
16. juni 2006 - 19:37 #6
tak for Jeres tid..

Buzz du var hurtigst ude, med det korrekt, men nielle du løste lige problemet..

Beklager den sene tilbage melding...

Smider i 2 et svar.

iakob > nu vil jeg ikke til at rodde mig ud i noget endnu sværere..

Tak til alle.
Avatar billede nielle Nybegynder
16. juni 2006 - 21:02 #7
Svar :^)
Avatar billede Syska Mester
19. juni 2006 - 17:20 #8
svar... selvom det kommer lidt sent :-)

// ouT
Avatar billede jokkejensen Novice
19. juni 2006 - 20:56 #9
Det er okay.. tak skal i ha'
Avatar billede nielle Nybegynder
19. juni 2006 - 21:45 #10
Tak for point :^)
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