Avatar billede testpilot_dk Nybegynder
15. november 2005 - 09:28 Der er 14 kommentarer og
1 løsning

Casting mellem MySqlDataReader og OleDbDataReader

Hej!

Er det muligt at caste en MySqlDataReader til en OleDbDataReader ???
Avatar billede arne_v Ekspert
15. november 2005 - 09:29 #1
nej
Avatar billede arne_v Ekspert
15. november 2005 - 09:30 #2
men begge kan bruges som IDataReader
Avatar billede testpilot_dk Nybegynder
15. november 2005 - 09:34 #3
Og Det betyder ?

At den type jeg vil returner skal være en IDataReader i stedet for en OleDbDataReader
Avatar billede arne_v Ekspert
15. november 2005 - 09:36 #4
nej

det betyder at du kan assigne både en MySqlDataReader og en OleDbDataReader
til en IDataReader
Avatar billede testpilot_dk Nybegynder
15. november 2005 - 09:37 #5
kan jeg få et eksempel

Min kode ser sådan ud:

        public override OleDbDataReader GetSQLResult(string sql)
        {
            try
            {
                OleDbCommand myCommand = new OleDbCommand(sql, cn);
                OleDbDataReader myReader = myCommand.ExecuteReader();
                return myReader;
            }
            catch(Exception ex)
            {
                WriteLog("Failed: " + ex.Message);
                return null;

            }
        }

        public MySqlDataReader GetSQLResult(string sql)
        {
            try
            {
                MySqlCommand myCommand = new MySqlCommand(sql, cn);
                MySqlDataReader myReader = myCommand.ExecuteReader();
                return myReader;
            }
            catch(Exception ex)
            {
                WriteLog("Failed: " + ex.Message);
                return null;

            }
        }
Avatar billede arne_v Ekspert
15. november 2005 - 09:47 #6
IDataReader r1 = GetSQLResult(sql);

vil compile med begge GetSqlResult
Avatar billede testpilot_dk Nybegynder
15. november 2005 - 09:49 #7
hvad så med min base klasse, den kan ikke lide MySqlDataReader når den har en return OleDbDataReader, den vil jeg gerne klare ogs¨å
Avatar billede arne_v Ekspert
15. november 2005 - 09:50 #8
prøv lige og studer dette her eksempel:

using System;
using System.Data;
using System.Data.SqlClient;
using System.Data.OleDb;
using System.Data.Odbc;

public class MultiDb
{
    public static IDbConnection GetConnection(string constr)
    {
        if(constr.ToUpper().IndexOf("DRIVER=") >= 0)
        {
            return new OdbcConnection(constr);         
        }
        else if(constr.ToUpper().IndexOf("PROVIDER=") >= 0)
        {
            return new OleDbConnection(constr);       
        }
        else if(constr.ToUpper().IndexOf("TRUSTED_CONNECTION=") >= 0 ||
                constr.ToUpper().IndexOf("INTEGRATED SECURITY=") >= 0)
        {
            return new SqlConnection(constr);         
        }
        else
        {
            return null;
        }
    }
}
class TestClass
{
    private static void test(string constr)
    {
        IDbConnection con = MultiDb.GetConnection(constr);
        con.Open();
        IDbCommand cmd = con.CreateCommand();
        cmd.CommandText = "SELECT * FROM T1";
        IDataReader rdr = cmd.ExecuteReader();
        while(rdr.Read()) {
            int f1 = (int)rdr[0];
            string f2 = (string)rdr[1];
            Console.WriteLine(f1 + " " + f2);
        }
        con.Close();
    }
    public static void Main(string[] args)
    {
        test("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\\Database\\MSAccess\\Test.mdb");
        test("server=ARNEPC2;Integrated Security=SSPI;database=Test");
    }
}
Avatar billede arne_v Ekspert
15. november 2005 - 09:52 #9
det er til .NET 1.1 - du kan se .NET 2.0 måden her http://www.eksperten.dk/artikler/694
Avatar billede testpilot_dk Nybegynder
15. november 2005 - 09:54 #10
okay, dvs at min bare klasse om skal være en IDataReader
Avatar billede testpilot_dk Nybegynder
15. november 2005 - 09:56 #11
Send et svar! så siger ejg tak
Avatar billede arne_v Ekspert
15. november 2005 - 09:57 #12
Hele finessen er at få lavet en konkret connection og så køre resten med
interfaces Ietellerandet
Avatar billede arne_v Ekspert
15. november 2005 - 09:57 #13
svar
Avatar billede testpilot_dk Nybegynder
15. november 2005 - 09:58 #14
ja, det kan jeg godt se og det er jo sindsygt smart!

Takker endnu engang
Avatar billede arne_v Ekspert
15. november 2005 - 10:03 #15
specielt fra .NET 2.0 er det rigtigt smart
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