ADO数据库连接通用类

ADO数据库连接通用类

 

   代码中包括连接读取sql server,oracle,access数据库

  
  1 using System;
  2 using System.Collections.Generic;
  3 using System.Text;
  4 using ADODB;
  5 using System.Collections;
  6 using System.IO;
  7 using System.Windows.Forms;
  8 namespace RadioAnalysisGIS.DataToSDE
  9 {
 10     public enum ConnectionType   //自定义连接类型枚举
 11     {
 12         connSQLServer=0,         //表示连接类型为SQL Server数据库
 13         connOracle = 1,          //表示连接类型为Oracle数据库
 14         connAccess = 2           //表示连接类型为Access数据库
 15     }
 16     public class DatabaseRecordset  //获取记录集相关参数及字段值的类,使用ADO方法
 17     {
 18         protected _Recordset m_pRecordset = new RecordsetClass();  //ADO记录集对象
 19         protected _Connection m_pConnection=new ConnectionClass();//ADO连接对象
 20         public DatabaseRecordset()
 21         {
 22             
 23         }
 24         ~DatabaseRecordset()
 25         {
 26             if (m_pRecordset.State!=0) m_pRecordset.Close();
 27         }
 28         public bool OnCreate(ConnectionType type, string DataSource, string DataBaseName, string UserID, string Password)
 29         //该方法依据传递过来的连接类型,连接的数据源、数据库名,用户名和密码,初始化连接对象
 30         {
 31             if (type == ConnectionType.connSQLServer)
 32             {
 33                 if (m_pRecordset.State != 0) m_pRecordset.Close();
 34                 string ConStr = "Provider=SQLOLEDB;Data Source=" + DataSource + ";Initial Catalog=" + DataBaseName + ";User ID=" + UserID + ";Password=" + Password + ";Persist Security Info=False";
 35                 m_pConnection.Open(ConStr, """"0);
 36                 return true;
 37             }
 38             else if (type == ConnectionType.connOracle)
 39             {
 40                 if (m_pRecordset.State != 0) m_pRecordset.Close();
 41                 string ConStr = "Provider=OraOLEDB.Oracle.1;Data Source=" + DataSource + ";";
 42                 m_pConnection.Open(ConStr, UserID, Password, 0);
 43                 return true;
 44             }
 45             else if (type == ConnectionType.connAccess)
 46             {
 47                 if (m_pRecordset.State != 0) m_pRecordset.Close();
 48                 string ConStr = "Provider=Microsoft.jet.OLEDB.4.0;Data Source="+DataSource+DataBaseName;
 49                 m_pConnection.Open(ConStr, """"0);
 50                 return true;
 51             }
 52             return false;
 53         }
 54         public bool Select(string SQL)
 55         //通过SQL字符串创建记录集
 56         {
 57             if (m_pRecordset.State != 0) m_pRecordset.Close();
 58             m_pRecordset.CursorLocation = CursorLocationEnum.adUseClient;
 59             m_pRecordset.Open(SQL, m_pConnection, CursorTypeEnum.adOpenDynamic, LockTypeEnum.adLockOptimistic, 1);
 60             return (m_pRecordset.State != 0);
 61         }
 62         public bool OpenTable(string TableName)
 63         //通过表名字符串创建记录集
 64         {
 65             if (m_pRecordset.State != 0) m_pRecordset.Close();
 66             m_pRecordset.CursorLocation = CursorLocationEnum.adUseClient;
 67             m_pRecordset.Open(TableName, m_pConnection, CursorTypeEnum.adOpenDynamic, LockTypeEnum.adLockOptimistic, 2);
 68             return (m_pRecordset.State != 0);
 69         }
 70         public long GetRecordCount()
 71         //得到记录个数
 72         {
 73             return m_pRecordset.RecordCount;
 74         }
 75         public long GetFieldCount()
 76         //得到字段个数
 77         {
 78             return m_pRecordset.Fields.Count;
 79         }
 80         public string GetFieldName(int index)
 81         //通过索引得到字段名
 82         {
 83             Fields pFields=m_pRecordset.Fields;
 84             IEnumerator pEnum=pFields.GetEnumerator();
 85             pEnum.Reset();
 86             pEnum.MoveNext();
 87             for (int k = 0; k < index; k++)
 88             {
 89                 pEnum.MoveNext();
 90             }
 91             Field pField = (Field)pEnum.Current;
 92             return pField.Name;
 93         }
 94         public DataTypeEnum GetFieldType(int index)
 95         //通过索引得到字段类型
 96         {
 97             Fields pFields = m_pRecordset.Fields;
 98             IEnumerator pEnum = pFields.GetEnumerator();
 99             pEnum.Reset();
100             pEnum.MoveNext();
101             for (int k = 0; k < index; k++)
102             {
103                 pEnum.MoveNext();
104             }
105             Field pField = (Field)pEnum.Current;
106             return pField.Type;
107         }
108         public int GetFieldPrecision(int index)
109         //通过索引得到字段精度
110         {
111             Fields pFields = m_pRecordset.Fields;
112             IEnumerator pEnum = pFields.GetEnumerator();
113             pEnum.Reset();
114             pEnum.MoveNext();
115             for (int k = 0; k < index; k++)
116             {
117                 pEnum.MoveNext();
118             }
119             Field pField = (Field)pEnum.Current;
120             return pField.Precision;
121         }
122         public int GetFieldNumericScale(int index)
123         //通过索引得到字段小数位数
124         {
125             Fields pFields = m_pRecordset.Fields;
126             IEnumerator pEnum = pFields.GetEnumerator();
127             pEnum.Reset();
128             pEnum.MoveNext();
129             for (int k = 0; k < index; k++)
130             {
131                 pEnum.MoveNext();
132             }
133             Field pField = (Field)pEnum.Current;
134             return pField.NumericScale;
135         }
136         public int GetFiledIndex(string Name)
137         //通过字段名称返回字段索引
138         {
139             int index = -1;
140             Fields pFields = m_pRecordset.Fields;
141             IEnumerator pEnum = pFields.GetEnumerator();
142             pEnum.Reset();
143             pEnum.MoveNext();
144             int k = 0;
145             foreach (Field fn in pFields)
146             {
147                 string name1 = fn.Name.ToUpper();
148                 name1=name1.Trim();
149                 string name2 = Name.ToUpper();
150                 name2=name2.Trim();
151                 if (name1 == name2)
152                 {
153                     index = k;
154                     break;
155                 }
156                 k++;
157             }
158             return index;
159         }
160         public void MoveFirst()
161         //移动记录集指针到第一条记录
162         {
163             m_pRecordset.MoveFirst();
164         }
165         public void MoveNext()
166         //向下移动记录集指针
167         {
168             m_pRecordset.MoveNext();
169         }
170         public bool IsEOF()
171         {//判断是否为最后一条
172             return m_pRecordset.EOF;
173         }
174         public bool IsBOF()
175         {//判断是否为第一条
176             return m_pRecordset.BOF;
177         }
178         public List<object> GetValueAsList()
179         //得到记录集当前指针所指记录的字段值列表
180         {
181             List<object> vs = new List<object>();
182             Fields pFields = m_pRecordset.Fields;
183             IEnumerator pEnum = pFields.GetEnumerator();
184             pEnum.Reset();
185             pEnum.MoveNext();
186             int Count = pFields.Count;
187             for (int k = 0; k < Count; k++)
188             {
189                 Field pField = (Field)pEnum.Current;
190                 vs.Add(pField.Value);
191                 pEnum.MoveNext();
192             }
193             return vs;
194         }
195         public bool AddInfo(string sql)
196         {
197             object obj = null;
198             m_pConnection.Execute(sql, out obj, 0);
199             return true;
200         }
201     }
202 
203 
204 
205     public class DatabaseParameters
206     //数据库连接参数类。该类存储了连接关键参数,并实现从txt文件读写关键变量
207     {
208         int DataSourceType=0;//属性库类型,0表示SQL Server,1表示Oracle
209         #region 属性库连接参数
210         string DataSource = "zhangye";
211         string DataBaseName="sde";
212         string UserID="sa";
213         string Password="sa";
214         #endregion
215         public int GetDataSourceType()
216         {
217             return DataSourceType;
218         }
219         public void GetDataBaseParameters(out string datasource, out string databasename, out string userid, out string password)
220         {
221             datasource = DataSource;
222             databasename = DataBaseName;
223             userid = UserID;
224             password = Password;
225         }//得到属性库连接参数
226         public bool ReadFromFile()
227         //从连接参数txt文件读取连接关键参数
228         {
229             string lpszPathName = FilePath.GetApplicationDir();
230             lpszPathName = lpszPathName + "\\dataconn.txt";
231             StreamReader reader = null;
232             try
233             {
234                 reader = new StreamReader(lpszPathName);
235                 string line = reader.ReadLine();
236                 line = reader.ReadLine();
237                 string[] SubStrings = line.Split(':');
238                 string sType = SubStrings[1];
239                 sType = sType.ToUpper();
240                 sType.Trim();
241                 if (sType == "SQL SERVER")
242                     DataSourceType = 0;
243                 else if (sType == "ORACLE")
244                     DataSourceType = 1;
245                 else if (sType== "Access")
246                     DataSourceType = 2;
247                 line = reader.ReadLine();
248                 SubStrings = line.Split(':');
249                 DataSource = SubStrings[1];
250                 line = reader.ReadLine();
251                 SubStrings = line.Split(':');
252                 DataBaseName = SubStrings[1];
253                 line = reader.ReadLine();
254                 SubStrings = line.Split(':');
255                 UserID = SubStrings[1];
256                 line = reader.ReadLine();
257                 SubStrings = line.Split(':');
258                 Password = SubStrings[1];
259             }
260             catch (IOException e)
261             {
262                 Console.WriteLine(e.Message);
263                 return false;
264             }
265             catch
266             {
267                 return false;
268             }
269             finally
270             {
271                 if (reader != null) reader.Close();
272             }
273             return true;
274         }
275         public void WhiteToConnFile()
276         //写入连接参数txt文件
277         {
278             string lpszPathName = FilePath.GetCurrentDir();
279             lpszPathName = lpszPathName + "\\dataconn.txt";
280             StreamWriter writer = File.CreateText(lpszPathName);
281             writer.Write("数据库配置参数");
282             writer.Write(writer.NewLine);
283             string sType = "SQL Server";
284             if (DataSourceType == 1) sType = "Oracle";
285             if (DataSourceType == 2) sType = "Access";
286             writer.Write("1、数据库类别:"+sType);
287             writer.Write(writer.NewLine);
288             writer.Write("2、数据源:" + DataSource);
289             writer.Write(writer.NewLine);
290             writer.Write("3、数据库:" + DataBaseName);
291             writer.Write(writer.NewLine);
292             writer.Write("4、用户:" + UserID);
293             writer.Write(writer.NewLine);
294             writer.Write("5、密码:" + Password);
295             writer.Write(writer.NewLine);
296             writer.Write(@"\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\");
297             writer.Write(writer.NewLine);
298             writer.Close();
299         }
300     }
301 
302 
303 }
304 

 

posted on 2009-12-31 11:51  findleaf  阅读(626)  评论(0编辑  收藏  举报

导航