[Mono-list] ADO.NET Provider Factory
Brian Ritchie
brianlritchie@hotmail.com
Mon, 04 Nov 2002 00:37:06 -0500
This is a multi-part message in MIME format.
------=_NextPart_000_7322_7759_7e0d
Content-Type: text/html
<html><div style='background-color:'><DIV>
<DIV>
<DIV>
<P>I've started work on the set of objects known as... "ADO.NET Multiplexor Provider" in... <A href="http://www.go-mono.com/ado-net.html">http://www.go-mono.com/ado-net.html</A></P>
<DIV>I'd appreciate the ADO.NET team to review this (and attached files) before I commit things to CVS. I'm planning to put them under /mcs/class/Mono.Data. Please note: connection strings will in attached files will need to be updated to match your configuration. I've done some basic testing of the code under MS.NET & Mono on Windows.</DIV></DIV>
<DIV></DIV>
<DIV></DIV>
<DIV></DIV>
<DIV></DIV>
<DIV></DIV>
<P>My implementation is similar to the one Gonzalo details, but a bit different in the following ways: <BR>1) The Provider information is seperate from the connection string information. This allows the list of providers to be stored in the machine.config. <BR>2) Provider and ProviderCollection objects are available to access the list of providers and modify them at runtime. <BR>3) The ProviderFactory object is used to create new connections, dataadapters, etc. </P>
<DIV></DIV>
<DIV></DIV>
<DIV></DIV>
<DIV></DIV>
<DIV></DIV>
<P><STRONG>Ok...now for some sample code. Creating a connection: </STRONG></P>
<DIV></DIV><PRE>// Create connection using enhanced connection string<BR>IDbConnection conn=ProviderFactory.CreateConnection("factory=System.Data.SqlClient;server=speedy;database=pubs;uid=sa"); </PRE><PRE><PRE>// Create connection specifying provider and standard connection string</PRE><PRE>IDbConnection conn=ProviderFactory.CreateConnection("System.Data.SqlClient","server=speedy;database=pubs;uid=sa"); </PRE><BR>// Create connection using connection string stored in app.config under <appSettings><BR>IDbConnection conn=ProviderFactory.CreateConnectionFromConfig("PubsConnStr"); </PRE>
<DIV></DIV>
<P><STRONG>Here's a sample app.config file showing the provider declarations along with sample connection strings:</STRONG></P><PRE><?xml version="1.0" encoding="utf-8" ?><BR><configuration><BR> <configSections><BR> <sectionGroup name="mono.data"><BR> <section name="providers" type="Mono.Data.ProviderSectionHandler,Mono.Data" /><BR> </sectionGroup><BR> </configSections></PRE><PRE> <appSettings><BR> <add key="PubsConnStr" value="factory=System.Data.SqlClient;server=speedy;database=pubs;uid=sa;pwd=" /><BR> </appSettings></PRE><PRE> <mono.data><BR> <providers><BR> <provider name="System.Data.SqlClient" connection="System.Data.SqlClient.SqlConnection" adapter="System.Data.SqlClient.SqlDataAdapter" assembly="System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/><BR> <provider name="System.Data.OleDb" connection="System.Data.OleDb.OleDbConnection" adapter="System.Data.OleDb.OleDbDataAdapter" assembly="System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/><BR> <provider name="System.Data.Odbc" connection="System.Data.Odbc.OdbcConnection" adapter="System.Data.OleDb.OdbcDataAdapter" assembly="System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/><BR> <provider name="Mono.Data.TdsClient" connection="Mono.Data.TdsClient.TdsConnection" adapter="Mono.Data.TdsClient.TdsDataAdapter" assembly="Mono.Data.TdsClient" /><BR> <provider name="Mono.Data.MySql" connection="Mono.Data.MySql.MySqlConnection" adapter="Mono.Data.MySql.MySqlDataAdapter" assembly="Mono.Data.MySql" /><BR> <provider name="Mono.Data.PostgreSqlClient" connection="Mono.Data.PostgreSqlClient.PgSqlConnection" adapter="Mono.Data.PostgreSqlClient.PgSqlDataAdapter" assembly="Mono.Data.PostgreSqlClient" /><BR> <provider name="Mono.Data.SqliteClient" connection="Mono.Data.SqliteClient.SqliteConnection" adapter="Mono.Data.SqliteClient.SqliteDataAdapter" assembly="Mono.Data.SqliteClient" /><BR> <provider name="Mono.Data.SybaseClient" connection="Mono.Data.SybaseClient.SybaseConnection" adapter="Mono.Data.SybaseClient.SybaseDataAdapter" assembly="Mono.Data.SybaseClient" /><BR> </providers><BR> </mono.data><BR></configuration></PRE>
<P>Alrighty..that's it! Let me know what you guys think...<BR>Brian</P>
<P> </P></DIV></DIV></div><br clear=all><hr>Internet access plans that fit your lifestyle -- join MSN. <a href="http://g.msn.com/8HMDEN/2018">Click Here</a> </html>
------=_NextPart_000_7322_7759_7e0d
Content-Type: application/x-zip-compressed; name="Mono.Data.zip"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="Mono.Data.zip"
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
AgAIAIcGYy38o0TSfwEAAD4EAAAZAAAATW9uby5EYXRhXHRlc3RcdGVzdC5i
dWlsZIWTT2/iMBDFz0HiO7hWT0iJE6lQQA6oUq/tpZdejTOJvHJs5D8saLXf
fY0DLKVNkCLFk/ebZ2XsR9f7VqIdGCu0KnGR5RiB4roSqimxsDqdz6eLtMDr
1Xg0HtGHNEXvL8qhjReyQrWQgGpt0JtWOntljmWVlChNO3pr9C/gDinWQokv
DEYV1MxLV+JogwOdHOEtGHc40RVsfIPRjkkfqppJC5hE24Q6Zho42/63SCi3
HHViiWEPGGnvtj4UDqzL4pfoW+LHP3Hxt2tMaGg670WU/s2MWhbTxRSTfj3P
Z8+DepEvhvXZsD57+ln3yrIaelq5VrVofhTN8uNgHbTHMxoGPlsZoUHofNw9
VJaR8EixIV8uB0Zn3GpvONiuSqhQXPoK7OlYJxMyybgN5qjDyReeGqjBgOo3
yC77c23CK25O7sLfR3QfvhnX/Ybb0Q109AyP3Pw/JeHuxxyRLgCrb0HhEpg6
BaUCCQ5ifq/DUTMhtQJjtLnO3LUpJadUh/U/UEsDBBQAAgAIAMK9Yy0wdJh2
UA8AAAAkAAAcAAAATW9uby5EYXRhXHRlc3RcTW9uby5EYXRhLmRsbO1ZfXAc
5Xl/3t293buTdPadJMvCkjnJln22LFkGGwz+wLJlx0osW1iycagzZnW3lq/c
3Z5374yFYzCltLgTMjBNKHGhUzyUlk4mTZu2IYV+pR8TZqAf08yQzNA0tP2D
dhroB9NJaRv6e57d+9BZgCfTf9p2pX3e93ne5/t93nff3Zu6+3HSicjA/f77
RC9ScO2hj74u4U7c+FsJ+vXYawMvqkOvDcyeyfvpsufOe3YxnbVLJbeSnnPS
XrWUzpfSE0dm0kU354x2dMTXhjqm9xMdUjpd+vc/2lXT+11KDLQpk6gPiBnQ
Du8ASNcc2xP0tcBvCv2vO6UFXV3gcvlvtPVGrndvJ7orVLldXyLIe4ja6Ye4
4F+0CY0CP9iEj1ac8xW0s6vCuPoafjepuGfU870shb7tCQNdvZhvD/5HPafg
ZkNf7wl1DV7Dt7fVzbEdQXswFNm5DjXQRaToh7u+pHVdhKyhZTBxcU0PEOOi
xk3kos5Nwrhoot349tK8rgUsFAj6eqDDCHREWFYfU9RG4mdSu8CC8WEyN5I+
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
zni+uo7jUjxt6G1Vnc5rd9jE6X8c7zRUH1lpOZyuRaw3HuZWm9i21qCycaHZ
4pJqbO9qeSByfb1Bb+givUDvcYo8vu4iHsyWN/ed+tkHeB0zZ1HUQnbCiMgP
6DS7QpRPDhf719rJ6PKPRGqVqemJs2bittQup63qq9aLTfIsvotXkDhOniVl
OM6yaNd+M5Fb3WCg0TJ4DNcbV+eaQKkAuboJ9ZdZlEaX/jJOobKJWPO/6gXw
4uo6Tv+5b/64V1NX8L/XbNjh49074buvMes+y7XPtWmFDYfIzbHDJ2cjOTMs
KjnzcRwYGGdLPnCCMcILZ8PK7AQUZtwcj1wyR88FU8MLq8YzwCPLWdGM1Skx
YV50MliRuNAz/NKZR3cOOFaQeeeknxCKWsJQLCt6rbPQPs3vD1BLAwQUAAIA
CAAYA2QtzS22d1YGAAA4HQAAHwAAAE1vbm8uRGF0YVxQcm92aWRlckNvbGxl
Y3Rpb24uY3PdWEtvGzcQPttA/sPcJKH2Ks0xko06TlAYaJzC8c3wgdqlJBa7
ywXJtaIU+e+dIffBfVlrV0CKGrYhUsN5fvMg5/PT+Rw+y1QGH5lhwZ9KPomI
q2sZxzw0QqanjuQqN1up9Hv6DPBBCZbCnTDhVnCYrmgZK7f8bStNwkQchDKZ
gaUveFzLbK/EZmtgej1r8jiDd2/fviMi/HtzmrKE64yFvFYN3pz+/eb0JNci
3cDXvTY8WbTWQa21fu674GvGQ8Fi8Z1HROd+5yh8qfMkYWp/WazpZ5kxxfwN
gCsIK25gtsyANlJxjec5h1Dx9cWkcuVkfgly9RdS66Dmspz7bJfzlmBixGIt
28xqKyZzon34ypW1hK1iPp094laWr2IRQhgzraF7Dt7DR2E/obgPTHMAPESu
JSdY4b4X7EbDDXbH/dykwjg/amCQ8h2IVBuWYtzkutcZDf0Dj9ty3uDfcEhp
UpfJdEbKO+1//AwTYIUejADdylJptlwd0WrasSonQPlwMXlicc4nLQOuRii5
VjKB3VaEW0Qr0srU8NSgwYoWmeBRrYEVeMDrPaiyunnRODFboYOrKLpj6YZP
3deLnxcnspmJlAoCS/douWL7oZOtjLVaHCtYYwXDTphtGTOJxhbWFwEsTXtd
3B4ejxYvF6s7nmH5s5gi/fCDQh8bu9BUbNeIMTQi4t/IdtoesD94mZcty8ml
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
FrKHD4mwupVcm7O77mGsWsGAtVQpsEusVBnCrrqyvh4ntuqob2syCJSm2igW
4cEqjxSNd80R9nXtQXwoq0KavX0NRVenoDTau73gzYQUyuo8DXwJKdgVgZeU
Ajlzx/nsZij4tXywWW5WkQI51fzmJNk5vaV8URFjNnY9C+1ysrKXr9C9zPvJ
fbai3Tn5HGYCuR6xn13u/tWD/i+v9bfnsL/5fgBQSwMEFAACAAgAY7RiLTKl
OWwvAAAATwAAABMAAABNb25vLkRhdGFcLnJlc3BvbnNlCyjKL8tMSS3SSy7m
grGd83NyUpNLMvPzkEXdEpNL8osqkYWCIao8EvNSciBGAABQSwMEFAACAAgA
Y7RiLQ/uv55VAAAAiAAAABMAAABNb25vLkRhdGFcLm1ha2VmcmFny8lMKkos
qtRNSS0o1isuScwtsFLIySwuUQgoyi/LTEkt0ksuVojhgvGc83NyUpNLMvPz
UMXdEpNL8osqUQWDISo9EvNScsAGcXGW5JcmZyhgWsoFAFBLAQIUABQAAAAA
AKIDZC0AAAAAAAAAAAAAAAAKAAAAAAAAAAAAEAAAAAAAAABNb25vLkRhdGEv
UEsBAhQAFAAAAAAAVwNkLQAAAAAAAAAAAAAAAA8AAAAAAAAAAAAQAAAAAAAA
AE1vbm8uRGF0YS90ZXN0L1BLAQIUABQAAgAIAFcDZC3L34Cb+gEAACkIAAAe
AAAAAAAAAAAAIAAAAAAAAABNb25vLkRhdGEvdGVzdC90ZXN0LmV4ZS5jb25m
aWdQSwECFAAUAAIACABLA2QtNpnAI0sGAAAAEgAAFwAAAAAAAAAAACAAAAA2
AgAATW9uby5EYXRhL3Rlc3QvdGVzdC5leGVQSwECFAAUAAIACABJA2QtcBIq
GpwBAABLAwAAFgAAAAAAAAAAACAAAAC2CAAATW9uby5EYXRhL3Rlc3QvdGVz
dC5jc1BLAQIUABQAAgAIAIcGYy38o0TSfwEAAD4EAAAZAAAAAAAAAAAAIAAA
AIYKAABNb25vLkRhdGEvdGVzdC90ZXN0LmJ1aWxkUEsBAhQAFAACAAgAwr1j
LTB0mHZQDwAAACQAABwAAAAAAAAAAAAgAAAAPAwAAE1vbm8uRGF0YS90ZXN0
L01vbm8uRGF0YS5kbGxQSwECFAAUAAIACAAYA2QtVY61mPcBAACXBAAAIwAA
AAAAAAAAACAAAADGGwAATW9uby5EYXRhL1Byb3ZpZGVyU2VjdGlvbkhhbmRs
ZXIuY3NQSwECFAAUAAIACAAuA2Qtk7nUM58CAADmBwAAHAAAAAAAAAAAACAA
AAD+HQAATW9uby5EYXRhL1Byb3ZpZGVyRmFjdG9yeS5jc1BLAQIUABQAAgAI
ABgDZC3NLbZ3VgYAADgdAAAfAAAAAAAAAAAAIAAAANcgAABNb25vLkRhdGEv
UHJvdmlkZXJDb2xsZWN0aW9uLmNzUEsBAhQAFAACAAgAGANkLWIFWVPsAQAA
fAYAABUAAAAAAAAAAAAgAAAAaicAAE1vbm8uRGF0YS9Qcm92aWRlci5jc1BL
AQIUABQAAgAIAKwFYy0D07/SgAEAAA4EAAAZAAAAAAAAAAAAIAAAAIkpAABN
b25vLkRhdGEvTW9uby5EYXRhLmJ1aWxkUEsBAhQAFAACAAgAsbNiLdu9UTy7
AAAAEQEAABYAAAAAAAAAAAAgAAAAQCsAAE1vbm8uRGF0YS9tYWtlZmlsZS5n
bnVQSwECFAAUAAIACABhtGItGlRwjzgAAABgAAAADgAAAAAAAAAAACAAAAAv
LAAATW9uby5EYXRhL2xpc3RQSwECFAAUAAIAAABjtGItAAAAAAAAAAAAAAAA
HAAAAAAAAAAAACAAAACTLAAATW9uby5EYXRhL2xpYnJhcnktZGVwcy5zdGFt
cFBLAQIUABQAAgAIABsDZC1VFyFyVwEAAMEDAAAWAAAAAAAAAAAAIAAAAM0s
AABNb25vLkRhdGEvRGF0YVRvb2xzLmNzUEsBAhQAFAACAAgAY7RiLTKlOWwv
AAAATwAAABMAAAAAAAAAAAAgAAAAWC4AAE1vbm8uRGF0YS8ucmVzcG9uc2VQ
SwECFAAUAAIACABjtGItD+6/nlUAAACIAAAAEwAAAAAAAAAAACAAAAC4LgAA
TW9uby5EYXRhLy5tYWtlZnJhZ1BLBQYAAAAAEgASAN0EAAA+LwAAAAA=
------=_NextPart_000_7322_7759_7e0d--