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 ???
Annonceindlæg fra Barco
15. november 2005 - 09:29
#1
nej
15. november 2005 - 09:30
#2
men begge kan bruges som IDataReader
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
15. november 2005 - 09:36
#4
nej det betyder at du kan assigne både en MySqlDataReader og en OleDbDataReader til en IDataReader
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; } }
15. november 2005 - 09:47
#6
IDataReader r1 = GetSQLResult(sql); vil compile med begge GetSqlResult
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¨å
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"); } }
15. november 2005 - 09:54
#10
okay, dvs at min bare klasse om skal være en IDataReader
15. november 2005 - 09:56
#11
Send et svar! så siger ejg tak
15. november 2005 - 09:57
#12
Hele finessen er at få lavet en konkret connection og så køre resten med interfaces Ietellerandet
15. november 2005 - 09:57
#13
svar
15. november 2005 - 09:58
#14
ja, det kan jeg godt se og det er jo sindsygt smart! Takker endnu engang
15. november 2005 - 10:03
#15
specielt fra .NET 2.0 er det rigtigt smart
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.