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 tema
Offentlig digitalisering
Fra effektivisering til digital suverænitet. Hvordan skaber det offentlige en digital fremtid med AI, sikkerhed og kontrol i centrum?
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.