2004-06-10 Atsushi Enomoto <atsushi@ximian.com>
[mono.git] / mcs / class / Mono.Data / ProviderFactory.cs
1 //\r
2 // Mono.Data.ProviderFactory\r
3 //\r
4 // Authors:\r
5 //   Brian Ritchie (brianlritchie@hotmail.com) \r
6 //  \r
7 //\r
8 // Copyright (C) Brian Ritchie, 2002\r
9 // \r
10 //\r
11 using System;\r
12 using System.Data;\r
13 using System.Reflection;\r
14 using System.Runtime.Remoting;\r
15 using System.Configuration;\r
16 using System.Xml;\r
17 using System.Collections.Specialized;\r
18 \r
19 namespace Mono.Data\r
20 {\r
21         public class ProviderFactory\r
22         {\r
23                 private static ProviderCollection providers;\r
24 \r
25                 static ProviderFactory()\r
26                 {\r
27                         providers=(ProviderCollection) ConfigurationSettings.GetConfig("mono.data/providers");\r
28                         if (providers==null)\r
29                                 providers=new ProviderCollection();\r
30                 }\r
31 \r
32                 static public ProviderCollection Providers\r
33                 {\r
34                         get\r
35                         {\r
36                                 return providers;\r
37                         }\r
38                 }\r
39 \r
40                 static public IDbConnection CreateConnectionFromConfig(string Setting)\r
41                 {\r
42                         return CreateConnection(ConfigurationSettings.AppSettings[Setting]);\r
43                 }\r
44 \r
45                 static public IDbConnection CreateConnection(string ConnectionString)\r
46                 {\r
47                         string[] ConnectionAttributes=ConnectionString.Split(new Char[1] { ';' }); \r
48                         string ProviderName=null;\r
49                         string NewConnectionString="";\r
50                         foreach (string s in ConnectionAttributes)\r
51                         {\r
52                                 string[] AttributeParts=s.Split(new Char[1] { '=' });\r
53                                 if (AttributeParts[0].ToLower().Trim()=="factory")\r
54                                         ProviderName=AttributeParts[1].Trim();\r
55                                 else \r
56                                         NewConnectionString+=";"+s;\r
57                         }\r
58                         NewConnectionString=NewConnectionString.Remove(0,1);\r
59                         return CreateConnection(ProviderName, NewConnectionString);\r
60                 }\r
61 \r
62                 static public IDbConnection CreateConnection(string ProviderName, string ConnectionString)\r
63                 {\r
64                         Provider provider=providers[ProviderName];\r
65                         IDbConnection conn=provider.CreateConnection();\r
66                         conn.ConnectionString=ConnectionString;\r
67                         return conn;\r
68                 }\r
69 \r
70                 static public IDbCommand CreateStoredProc(IDbConnection Conn, string CommandName)\r
71                 {\r
72                         IDbCommand cmd=Conn.CreateCommand();\r
73                         cmd.CommandText=CommandName;\r
74                         cmd.CommandType=CommandType.StoredProcedure;\r
75                         return cmd;\r
76                 }\r
77 \r
78                 static public IDbDataAdapter CreateDataAdapter(IDbCommand SelectCommand)\r
79                 {\r
80                         Provider provider=providers.FindByCommandType(SelectCommand.GetType());\r
81                         IDbDataAdapter adapter=provider.CreateDataAdapter();\r
82                         adapter.SelectCommand=SelectCommand;\r
83                         return adapter;\r
84                 }\r
85 \r
86                 static public IDbDataAdapter CreateDataAdapter(string ProviderName)\r
87                 {\r
88                         Provider provider=providers[ProviderName];\r
89                         IDbDataAdapter adapter=provider.CreateDataAdapter();\r
90                         return adapter;\r
91                 }\r
92 \r
93                 static public IDbDataAdapter CreateDataAdapter(IDbConnection Conn, string SelectCommand)\r
94                 {\r
95                         IDbCommand cmd=Conn.CreateCommand();\r
96                         cmd.CommandText=SelectCommand;\r
97                         return CreateDataAdapter(cmd);\r
98                 }\r
99 \r
100                 static public IDbCommand CreateCommand(string ProviderName)\r
101                 {\r
102                         Provider provider=providers[ProviderName];\r
103                         return provider.CreateCommand();\r
104                 }\r
105 \r
106                 static public IDbCommand CreateCommand(IDbConnection Conn)\r
107                 {\r
108                         return Conn.CreateCommand();\r
109                 }\r
110 \r
111         }\r
112 }\r