Uniwersalny dostęp do bazy danych

0

W aplikacji Windows Forms można wyciągnąć z bazy danych dowolne informacje na dwa sposoby:

        private void button1_Click(object sender, EventArgs e)
        {
            System.Data.OleDb.OleDbConnection Conn = new System.Data.OleDb.OleDbConnection("Provider=SQLOLEDB.1;Password=zzxc;Persist Security Info=True;User ID=zzxc;Initial Catalog=kip;Data Source=XX");
            System.Data.OleDb.OleDbCommand Cmd = new System.Data.OleDb.OleDbCommand("select top 3 Nazwa from Zapas", Conn);
            Conn.Open();
            System.Data.OleDb.OleDbDataReader DataR;
            DataR = Cmd.ExecuteReader();
            string T = "";
            while (DataR.Read())
            {
                T = T + DataR[0].ToString() + "\r\n";
            }
            MessageBox.Show(T);
            Conn.Close();
        }
        private void button2_Click(object sender, EventArgs e)
        {
            System.Data.Odbc.OdbcConnection Conn = new System.Data.Odbc.OdbcConnection("Driver={SQL Server};Server=XX;UID=zzxc;PWD=zzxc;Database=kip;");
            System.Data.Odbc.OdbcCommand Cmd = new System.Data.Odbc.OdbcCommand("select top 3 Nazwa from Zapas", Conn);
            Conn.Open();
            System.Data.Odbc.OdbcDataReader DataR;
            DataR = Cmd.ExecuteReader();
            string T = "";
            while (DataR.Read())
            {
                T = T + DataR[0].ToString() + "\r\n";
            }
            MessageBox.Show(T);
            Conn.Close();
        }

W obu przypadkach efekt jest ten sam, tylko zmienia się sterownik bazy danych, z którego korzystamy.

Natomiast, jak próbuję napisać aplikację na palmtop (Smart device), to ani jeden, ani drugi kod nie da się skompilować, bo nie ma ani OleDB, ani ODBC. Natomiast jest SqlClient.

Taki kod da się kompilować:

        private void button1_Click(object sender, EventArgs e)
        {
            System.Data.SqlClient.SqlConnection Conn = new System.Data.SqlClient.SqlConnection("xxx");
            System.Data.SqlClient.SqlCommand Cmd = new System.Data.SqlClient.SqlCommand("select top 3 Nazwa from Zapas", Conn);
            Conn.Open();
            System.Data.SqlClient.SqlDataReader DataR;
            DataR = Cmd.ExecuteReader();
            string T = "";
            while (DataR.Read())
            {
                T = T + DataR[0].ToString() + "\r\n";
            }
            MessageBox.Show(T);
            Conn.Close();
        }

Jednak tego ostatniego kodu nie da się skompilować w aplikacji desktopowej lub webowej, przy dodawaniu referencji nie ma SqlClient.

Wydaje się, że ODBC powinien działac, bo jest niezależny od platformy, natomiast SqlClient powinien być dostępny również w zwykłej aplikacji, ponieważ Compact Framework to tylko podzbiór zwykłego .NET.

W jaki sposób napisać procedurę, która będzie działać w obu przypadkach? Innymi słowy, jak zmusić VisualStudio do tego, żeby można było odwoływać się do bazy danych w ten sam sposób zarówno na desktopie, w ASP.NET, jak i na Windows mobile?

Ostatecznie chciałbym napisać DLL, która w metodzie wyciąga pewne dane z bazy danych i je zwraca jako wynik metody i żeby dało się ten DLL wykorzystać w dowolnej aplikacji .NET na dowolną platformę.

0

Sprawdzać, jaka jest platforma i odpalać odpowiedni kod? Nie rozumiem jaki problem masz.

0

Niemożliwe że nie ma SqlClient!!!
Każda z wyżej wymienionych klas ze słowem connection implementuje interfejs IDbConnection

oczywiście odpowiednie klasy implementują IDbCommand
Nie pamiętam jak nazywa się interfejs dla Reader ale wszystkie readery też implementują wspólny interfejs.

0
siararadek napisał(a)

Sprawdzać, jaka jest platforma i odpalać odpowiedni kod? Nie rozumiem jaki problem masz.

Problem jest taki, że nie da się skompilować obu wersji w jednym projekcie.

gosc_z_pytaniem napisał(a)

Niemożliwe że nie ma SqlClient!!!
Każda z wyżej wymienionych klas ze słowem connection implementuje interfejs IDbConnection

oczywiście odpowiednie klasy implementują IDbCommand
Nie pamiętam jak nazywa się interfejs dla Reader ale wszystkie readery też implementują wspólny interfejs.

W projekcie dla palmtopa jest jak wół SqlClient, natomiast dla desktopa nie ma na liście. A dodawanie obcych plików mija się z celem, bo wtedy razem z aplikacją trzeba ten plik dodawać, co mija się z celem. Co więcej, w obu projektach jest System.Data, ale tylko w tym dla Desktopa jest ODBC i OleDB.

0

Zmień typ projektu z .NET Framework XX Client Profile na .NET Framework i powinno być

1 użytkowników online, w tym zalogowanych: 0, gości: 1