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ę.