一个C#实现的数据库访问帮助类DatabaseHelper

来源:互联网 发布:西岐网络 彭永辉 编辑:程序博客网 时间:2024/06/14 11:19

自己实现的数据库访问帮助类库,DataBaseAccessHelper。

支持MySQL、SQL Server,Oracle等数据库类型;

支持多种数据库访问方式;

支持单行记录中某个字段、整行记录及数据集的查询操作;

支持SQL命令执行操作(DML、DDL);

支持存储过程;

支持异步读取数据库记录;

库中各个类说明:

DataBaseAccess:执行数据库访问的核心功能类;

AccessType:数据库访问方式,枚举类型;

DatabaseDefinitions:包含一些常量的定义;

DatabaseParam:数据库参数;

DatabaseAsyncState:异步执行数据查询时的状态;

AccessType:

[csharp] view plaincopyprint?
  1. /// <summary>
  2. /// 数据库访问类型
  3. /// </summary>
  4. public enum AccessType
  5. {
  6. MySQLClient,
  7. MSSQLClient,
  8. OracleDirect,
  9. OracleTNS,
  10. MySQLODBC,
  11. MSSQLODBC,
  12. MSOracleODBC,
  13. OracleODBC,
  14. IBMDataDB2,
  15. DB2ODBC
  16. }
[csharp] view plaincopyprint?
  1. /// <summary>
  2. /// 数据库访问类型
  3. /// </summary>
  4. public enum AccessType
  5. {
  6. MySQLClient,
  7. MSSQLClient,
  8. OracleDirect,
  9. OracleTNS,
  10. MySQLODBC,
  11. MSSQLODBC,
  12. MSOracleODBC,
  13. OracleODBC,
  14. IBMDataDB2,
  15. DB2ODBC
  16. }


DatabaseDefinitions:

[csharp] view plaincopyprint?
  1. /// <summary>
  2. /// 定义数据库相关常量
  3. /// 数据库类型常量
  4. /// 数据库端口常量等
  5. /// </summary>
  6. public class DatabaseDefinitions
  7. {
  8. public constint DATABASE_TYPE_MYSQL = 1;
  9. public constint DATABASE_TYPE_MSSQL = 2;
  10. public constint DATABASE_TYPE_ORACLE = 3;
  11. public constint DATABASE_TYPE_SYBASE = 4;
  12. public constint DATABASE_TYPE_DB2 = 5;
  13. public constint DATABASE_DEFAULT_PORT_MYSQL = 3306;
  14. public constint DATABASE_DEFAULT_PORT_MSSQL = 1433;
  15. public constint DATABASE_DEFAULT_PORT_ORACLE = 1521;
  16. public constint DATABASE_DEFAULT_PORT_SYBASE = 5000;
  17. public constint DATABASE_DEFAULT_PORT_DB2 = 50000;
  18. public conststring DATABASE_RETURN_ERROR = "\0x07\0x07\0x07\0x07\0x07";
  19. }
[csharp] view plaincopyprint?
  1. /// <summary>
  2. /// 定义数据库相关常量
  3. /// 数据库类型常量
  4. /// 数据库端口常量等
  5. /// </summary>
  6. public class DatabaseDefinitions
  7. {
  8. public constint DATABASE_TYPE_MYSQL = 1;
  9. public constint DATABASE_TYPE_MSSQL = 2;
  10. public constint DATABASE_TYPE_ORACLE = 3;
  11. public constint DATABASE_TYPE_SYBASE = 4;
  12. public constint DATABASE_TYPE_DB2 = 5;
  13. public constint DATABASE_DEFAULT_PORT_MYSQL = 3306;
  14. public constint DATABASE_DEFAULT_PORT_MSSQL = 1433;
  15. public constint DATABASE_DEFAULT_PORT_ORACLE = 1521;
  16. public constint DATABASE_DEFAULT_PORT_SYBASE = 5000;
  17. public constint DATABASE_DEFAULT_PORT_DB2 = 50000;
  18. public conststring DATABASE_RETURN_ERROR = "\0x07\0x07\0x07\0x07\0x07";
  19. }


DatabaseParam:

[csharp] view plaincopyprint?
  1. /// <summary>
  2. /// 数据库参数
  3. /// </summary>
  4. public class DatabaseParam
  5. {
  6. /// <summary>
  7. /// 数据库类型
  8. /// 1:MySQL
  9. /// 2:SQL Server
  10. /// 3:Oracle
  11. /// 4:Sybase
  12. /// 5:DB2
  13. /// </summary>
  14. public int DBType {get; set; }
  15. /// <summary>
  16. /// 数据库服务器地址
  17. /// </summary>
  18. public string DBHost {get; set; }
  19. /// <summary>
  20. /// 端口
  21. /// </summary>
  22. public int DBPort {get; set; }
  23. /// <summary>
  24. /// 数据库名
  25. /// </summary>
  26. public string DBName {get; set; }
  27. /// <summary>
  28. /// 登录用户名
  29. /// </summary>
  30. public string DBUser {get; set; }
  31. /// <summary>
  32. /// 登录密码
  33. /// </summary>
  34. public string DBPassword {get; set; }
  35. /// <summary>
  36. /// 默认数据库参数
  37. /// 数据库类型:MySQL
  38. /// 端口:3306
  39. /// 其他为空
  40. /// </summary>
  41. public DatabaseParam()
  42. {
  43. DBType = 1;
  44. DBHost = "";
  45. DBPort = 3306;
  46. DBName = "";
  47. DBUser = "";
  48. DBPassword = "";
  49. }
  50. /// <summary>
  51. /// 指定数据库类型、主机、端口、数据库名、登录名和密码
  52. /// </summary>
  53. /// <param name="db_type">数据库类型</param>
  54. /// <param name="db_host">主机</param>
  55. /// <param name="db_port">端口</param>
  56. /// <param name="db_name">数据库名</param>
  57. /// <param name="db_user">登录名</param>
  58. /// <param name="db_pass">密码</param>
  59. public DatabaseParam(int db_type,string db_host, int db_port,string db_name, string db_user,string db_pass)
  60. {
  61. DBType = db_type;
  62. DBHost = db_host;
  63. DBPort = db_port;
  64. DBName = db_name;
  65. DBUser = db_user;
  66. DBPassword = db_pass;
  67. }
  68. /// <summary>
  69. /// 指定数据库类型、主机、数据库名、登录名和密码,端口根据数据库类型默认指定
  70. /// </summary>
  71. /// <param name="db_type">数据库类型</param>
  72. /// <param name="db_host">主机</param>
  73. /// <param name="db_name">数据库名</param>
  74. /// <param name="db_user">登录名</param>
  75. /// <param name="db_pass">密码</param>
  76. public DatabaseParam(int db_type,string db_host, string db_name,string db_user, string db_pass)
  77. {
  78. DBType = db_type;
  79. DBHost = db_host;
  80. switch (db_type)
  81. {
  82. case 1:
  83. DBPort = DatabaseDefinitions.DATABASE_DEFAULT_PORT_MYSQL;
  84. break;
  85. case 2:
  86. DBPort = DatabaseDefinitions.DATABASE_DEFAULT_PORT_MSSQL;
  87. break;
  88. case 3:
  89. DBPort = DatabaseDefinitions.DATABASE_DEFAULT_PORT_ORACLE;
  90. break;
  91. case 4:
  92. DBPort = DatabaseDefinitions.DATABASE_DEFAULT_PORT_SYBASE;
  93. break;
  94. case 5:
  95. DBPort = DatabaseDefinitions.DATABASE_DEFAULT_PORT_DB2;
  96. break;
  97. default:
  98. DBPort = DatabaseDefinitions.DATABASE_DEFAULT_PORT_MYSQL;
  99. break;
  100. }
  101. DBName = db_name;
  102. DBUser = db_user;
  103. DBPassword = db_pass;
  104. }
  105. /// <summary>
  106. /// 指定参数数组
  107. /// </summary>
  108. /// <param name="db_params">
  109. /// 0:数据库类型
  110. /// 1:数据库服务器地址
  111. /// 2:端口
  112. /// 3:数据库名
  113. /// 4:登录名
  114. /// 5:密码
  115. /// </param>
  116. public DatabaseParam(string[] db_params)
  117. {
  118. int db_type, db_port;
  119. DBType = int.TryParse(db_params[0],out db_type) == true ? db_type : 1;
  120. DBHost = db_params[1];
  121. DBPort = int.TryParse(db_params[2],out db_port) == true ? db_type : 3306;
  122. DBName = db_params[3];
  123. DBUser = db_params[4];
  124. DBPassword = db_params[5];
  125. }
  126. }
[csharp] view plaincopyprint?
  1. /// <summary>
  2. /// 数据库参数
  3. /// </summary>
  4. public class DatabaseParam
  5. {
  6. /// <summary>
  7. /// 数据库类型
  8. /// 1:MySQL
  9. /// 2:SQL Server
  10. /// 3:Oracle
  11. /// 4:Sybase
  12. /// 5:DB2
  13. /// </summary>
  14. public int DBType {get; set; }
  15. /// <summary>
  16. /// 数据库服务器地址
  17. /// </summary>
  18. public string DBHost {get; set; }
  19. /// <summary>
  20. /// 端口
  21. /// </summary>
  22. public int DBPort {get; set; }
  23. /// <summary>
  24. /// 数据库名
  25. /// </summary>
  26. public string DBName {get; set; }
  27. /// <summary>
  28. /// 登录用户名
  29. /// </summary>
  30. public string DBUser {get; set; }
  31. /// <summary>
  32. /// 登录密码
  33. /// </summary>
  34. public string DBPassword {get; set; }
  35. /// <summary>
  36. /// 默认数据库参数
  37. /// 数据库类型:MySQL
  38. /// 端口:3306
  39. /// 其他为空
  40. /// </summary>
  41. public DatabaseParam()
  42. {
  43. DBType = 1;
  44. DBHost = "";
  45. DBPort = 3306;
  46. DBName = "";
  47. DBUser = "";
  48. DBPassword = "";
  49. }
  50. /// <summary>
  51. /// 指定数据库类型、主机、端口、数据库名、登录名和密码
  52. /// </summary>
  53. /// <param name="db_type">数据库类型</param>
  54. /// <param name="db_host">主机</param>
  55. /// <param name="db_port">端口</param>
  56. /// <param name="db_name">数据库名</param>
  57. /// <param name="db_user">登录名</param>
  58. /// <param name="db_pass">密码</param>
  59. public DatabaseParam(int db_type,string db_host, int db_port,string db_name, string db_user,string db_pass)
  60. {
  61. DBType = db_type;
  62. DBHost = db_host;
  63. DBPort = db_port;
  64. DBName = db_name;
  65. DBUser = db_user;
  66. DBPassword = db_pass;
  67. }
  68. /// <summary>
  69. /// 指定数据库类型、主机、数据库名、登录名和密码,端口根据数据库类型默认指定
  70. /// </summary>
  71. /// <param name="db_type">数据库类型</param>
  72. /// <param name="db_host">主机</param>
  73. /// <param name="db_name">数据库名</param>
  74. /// <param name="db_user">登录名</param>
  75. /// <param name="db_pass">密码</param>
  76. public DatabaseParam(int db_type,string db_host, string db_name,string db_user, string db_pass)
  77. {
  78. DBType = db_type;
  79. DBHost = db_host;
  80. switch (db_type)
  81. {
  82. case 1:
  83. DBPort = DatabaseDefinitions.DATABASE_DEFAULT_PORT_MYSQL;
  84. break;
  85. case 2:
  86. DBPort = DatabaseDefinitions.DATABASE_DEFAULT_PORT_MSSQL;
  87. break;
  88. case 3:
  89. DBPort = DatabaseDefinitions.DATABASE_DEFAULT_PORT_ORACLE;
  90. break;
  91. case 4:
  92. DBPort = DatabaseDefinitions.DATABASE_DEFAULT_PORT_SYBASE;
  93. break;
  94. case 5:
  95. DBPort = DatabaseDefinitions.DATABASE_DEFAULT_PORT_DB2;
  96. break;
  97. default:
  98. DBPort = DatabaseDefinitions.DATABASE_DEFAULT_PORT_MYSQL;
  99. break;
  100. }
  101. DBName = db_name;
  102. DBUser = db_user;
  103. DBPassword = db_pass;
  104. }
  105. /// <summary>
  106. /// 指定参数数组
  107. /// </summary>
  108. /// <param name="db_params">
  109. /// 0:数据库类型
  110. /// 1:数据库服务器地址
  111. /// 2:端口
  112. /// 3:数据库名
  113. /// 4:登录名
  114. /// 5:密码
  115. /// </param>
  116. public DatabaseParam(string[] db_params)
  117. {
  118. int db_type, db_port;
  119. DBType = int.TryParse(db_params[0],out db_type) == true ? db_type : 1;
  120. DBHost = db_params[1];
  121. DBPort = int.TryParse(db_params[2],out db_port) == true ? db_type : 3306;
  122. DBName = db_params[3];
  123. DBUser = db_params[4];
  124. DBPassword = db_params[5];
  125. }
  126. }


DatabaseAsyncState:

[csharp] view plaincopyprint?
  1. /// <summary>
  2. /// 异步执行状态
  3. /// </summary>
  4. public class DatabaseAsyncState
  5. {
  6. /// <summary>
  7. /// IDbCommand对象
  8. /// </summary>
  9. public IDbCommand DbCommand {get; set; }
  10. /// <summary>
  11. /// IDataReader对象
  12. /// </summary>
  13. public IDataReader DataReader {get; set; }
  14. }
[csharp] view plaincopyprint?
  1. /// <summary>
  2. /// 异步执行状态
  3. /// </summary>
  4. public class DatabaseAsyncState
  5. {
  6. /// <summary>
  7. /// IDbCommand对象
  8. /// </summary>
  9. public IDbCommand DbCommand {get; set; }
  10. /// <summary>
  11. /// IDataReader对象
  12. /// </summary>
  13. public IDataReader DataReader {get; set; }
  14. }


DataBaseAccess:

[csharp] view plaincopyprint?
  1. /// <summary>
  2. /// 访问数据库,提供连接、查询、执行SQL等数据库访问功能
  3. /// author:Charley
  4. /// date:2012/4/30
  5. /// </summary>
  6. public class DataBaseAccess
  7. {
  8. private DatabaseParam m_databaseparam;
  9. /// <summary>
  10. /// 获取或设置数据库参数
  11. /// </summary>
  12. public DatabaseParam DatabaseParam
  13. {
  14. get { return m_databaseparam; }
  15. set { m_databaseparam = value; }
  16. }
  17. private string m_errormsg;
  18. /// <summary>
  19. /// 获取内部操作操作错误信息,得到上一步操作的错误消息
  20. /// </summary>
  21. public string ErrorMsg
  22. {
  23. get { return m_errormsg; }
  24. }
  25. private string m_connectionstring;
  26. /// <summary>
  27. /// 获取或设置数据库连接字符串
  28. /// </summary>
  29. public string ConnectionString
  30. {
  31. get { return m_connectionstring; }
  32. set { m_connectionstring = value; }
  33. }
  34. private AccessType m_accessType;
  35. /// <summary>
  36. /// 设置数据库访问方式
  37. /// </summary>
  38. public AccessType AccessType
  39. {
  40. set { m_accessType = value; }
  41. }
  42. private string m_providername;
  43. /// <summary>
  44. /// 设置数据提供者名称,用于ODBC连接
  45. /// </summary>
  46. public string ProviderName
  47. {
  48. //get { return m_providername; }
  49. set { m_providername = value; }
  50. }
  51. private int m_commandtimeout;
  52. /// <summary>
  53. /// 设置命令执行的超时时间,0:不限制,即采用数据库默认值
  54. /// </summary>
  55. public int CommandTimeout
  56. {
  57. set { m_commandtimeout = value; }
  58. }
  59. private int m_connectiontimeout;
  60. /// <summary>
  61. /// 设置数据库连接超时时间,0:不限制,即采用数据库默认值
  62. /// </summary>
  63. public int ConnectionTimeout
  64. {
  65. set { m_connectiontimeout = value; }
  66. }
  67. /// <summary>
  68. ///使用默认值构造
  69. /// </summary>
  70. public DataBaseAccess()
  71. {
  72. m_databaseparam = new DatabaseParam();
  73. m_accessType = AccessType.MySQLClient;
  74. m_errormsg = string.Empty;
  75. m_connectionstring = string.Empty;
  76. m_providername = string.Empty;
  77. m_commandtimeout = 0;
  78. m_connectiontimeout = 0;
  79. }
  80. /// <summary>
  81. /// 指定数据库参数构造
  82. /// </summary>
  83. /// <param name="database_param">数据库参数</param>
  84. public DataBaseAccess(DatabaseParam database_param)
  85. : this()
  86. {
  87. m_databaseparam = database_param;
  88. }
  89. /// <summary>
  90. /// 指定数据库参数及数据库访问类型构造
  91. /// </summary>
  92. /// <param name="database_param">数据库参数</param>
  93. /// <param name="access_type">数据库访问类型</param>
  94. public DataBaseAccess(DatabaseParam database_param, AccessType access_type)
  95. : this()
  96. {
  97. m_databaseparam = database_param;
  98. m_accessType = access_type;
  99. }
  100. /// <summary>
  101. /// 清除内部错误消息
  102. /// </summary>
  103. public void ClearMessage()
  104. {
  105. m_errormsg = string.Empty;
  106. }
  107. /// <summary>
  108. /// 测试数据库连接
  109. /// 连接成功:true
  110. /// 连接失败:False
  111. /// </summary>
  112. /// <returns></returns>
  113. public bool TestConnection()
  114. {
  115. bool b_return = false;
  116. if (m_connectionstring.Equals(string.Empty))
  117. {
  118. BuildConnectionString();
  119. }
  120. IDbConnection obj_connection = GetDBConnection();
  121. obj_connection.ConnectionString = m_connectionstring;
  122. try
  123. {
  124. obj_connection.Open();
  125. b_return = true;
  126. }
  127. catch (Exception ex)
  128. {
  129. m_errormsg = ex.ToString();
  130. }
  131. finally
  132. {
  133. if (obj_connection.State == ConnectionState.Open)
  134. {
  135. obj_connection.Close();
  136. }
  137. }
  138. return b_return;
  139. }
  140. /// <summary>
  141. /// 获取记录行数
  142. /// 返回 -1 指示操作有错误
  143. /// </summary>
  144. /// <param name="str_sql">查询语句</param>
  145. /// <returns></returns>
  146. public int GetRecordNum(string str_sql)
  147. {
  148. DataSet obj_ds = GetDataSet(str_sql);
  149. if (obj_ds == null || obj_ds.Tables.Count <= 0)
  150. {
  151. return -1;
  152. }
  153. return obj_ds.Tables[0].Rows.Count;
  154. }
  155. /// <summary>
  156. /// 获取指定列的值
  157. /// 返回 DATABASE_RETURN_ERROR 指示操作有错误
  158. /// </summary>
  159. /// <param name="str_sql">查询语句</param>
  160. /// <param name="column_name">列名</param>
  161. /// <returns></returns>
  162. public string GetStringValue(string column_name,string str_sql)
  163. {
  164. string s_return =string.Empty;
  165. DataRow obj_dr = GetFirstRecord(str_sql);
  166. if (obj_dr == null)
  167. {
  168. s_return = DatabaseDefinitions.DATABASE_RETURN_ERROR;
  169. return s_return;
  170. }
  171. try
  172. {
  173. s_return = obj_dr[column_name].ToString();
  174. }
  175. catch (Exception ex)
  176. {
  177. m_errormsg = ex.ToString();
  178. s_return = DatabaseDefinitions.DATABASE_RETURN_ERROR;
  179. return s_return;
  180. }
  181. return s_return;
  182. }
  183. /// <summary>
  184. /// 获取第一条记录
  185. /// 返回 null 指示操作有错误
  186. /// </summary>
  187. /// <param name="str_sql">查询语句</param>
  188. /// <returns></returns>
  189. public DataRow GetFirstRecord(string str_sql)
  190. {
  191. DataSet obj_ds = GetDataSet(str_sql);
  192. if (obj_ds == null || obj_ds.Tables.Count <= 0)
  193. {
  194. return null;
  195. }
  196. int count = obj_ds.Tables[0].Rows.Count;
  197. if (count == 0)
  198. {
  199. m_errormsg = "No Record.";
  200. return null;
  201. }
  202. return obj_ds.Tables[0].Rows[0];
  203. }
  204. /// <summary>
  205. /// 获取数据集
  206. /// 返回 null 指示操作有错误
  207. /// </summary>
  208. /// <param name="str_sql">查询语句</param>
  209. /// <returns></returns>
  210. public DataSet GetDataSet(string str_sql)
  211. {
  212. DataSet obj_ds = new DataSet();
  213. if (m_connectionstring.Equals(string.Empty))
  214. {
  215. BuildConnectionString();
  216. }
  217. IDataAdapter obj_dapt = GetDataAdapter(str_sql);
  218. try
  219. {
  220. obj_dapt.Fill(obj_ds);
  221. if (obj_ds.Tables.Count <= 0)
  222. {
  223. m_errormsg = "No table.";
  224. obj_ds = null;
  225. }
  226. }
  227. catch (Exception ex)
  228. {
  229. m_errormsg = ex.ToString();
  230. obj_ds = null;
  231. }
  232. return obj_ds;
  233. }
  234. /// <summary>
  235. /// 执行SQL命令,返回受影响的行数
  236. /// 返回 -2 指示操作有错误
  237. /// 返回 -1 指示执行DDL命令
  238. /// </summary>
  239. /// <param name="str_sql">SQL命令</param>
  240. /// <returns></returns>
  241. public int ExecuteCommand(string str_sql)
  242. {
  243. int i_return = -2;
  244. if (m_connectionstring.Equals(string.Empty))
  245. {
  246. BuildConnectionString();
  247. }
  248. IDbConnection obj_con = GetDBConnection();
  249. obj_con.ConnectionString = m_connectionstring;
  250. IDbCommand obj_cmd = GetDBCommand();
  251. try
  252. {
  253. obj_con.Open();
  254. obj_cmd.Connection = obj_con;
  255. obj_cmd.CommandText = str_sql;
  256. return obj_cmd.ExecuteNonQuery();
  257. }
  258. catch (Exception ex)
  259. {
  260. m_errormsg = ex.ToString();
  261. i_return = -2;
  262. }
  263. finally
  264. {
  265. if (obj_con.State == ConnectionState.Open)
  266. {
  267. obj_con.Close();
  268. }
  269. }
  270. return i_return;
  271. }
  272. /// <summary>
  273. /// 执行存储过程
  274. /// </summary>
  275. /// <typeparam name="T">DataParameter参数类型,实现IDataParameter接口</typeparam>
  276. /// <param name="proc_name">存储过程名称</param>
  277. /// <param name="parameters">参数列表</param>
  278. /// <returns></returns>
  279. public bool ExecuteProcedure<T>(string proc_name,ref T[] parameters) where T : IDataParameter
  280. {
  281. bool b_return = false;
  282. if (m_connectionstring.Equals(string.Empty))
  283. {
  284. BuildConnectionString();
  285. }
  286. IDbConnection obj_con = GetDBConnection();
  287. obj_con.ConnectionString = m_connectionstring;
  288. try
  289. {
  290. obj_con.Open();
  291. IDbCommand obj_cmd = GetDBCommand();
  292. obj_cmd.Connection = obj_con;
  293. obj_cmd.CommandType = CommandType.StoredProcedure;
  294. obj_cmd.CommandText = proc_name;
  295. foreach (T parameterin parameters)
  296. {
  297. obj_cmd.Parameters.Add(parameter);
  298. }
  299. obj_cmd.ExecuteNonQuery();
  300. b_return = true;
  301. }
  302. catch (Exception ex)
  303. {
  304. m_errormsg = ex.ToString();
  305. b_return = false;
  306. }
  307. finally
  308. {
  309. if (obj_con.State == ConnectionState.Open)
  310. {
  311. obj_con.Close();
  312. }
  313. }
  314. return b_return;
  315. }
  316. /// <summary>
  317. /// 执行SQL命令,返回数据读取器DataReader
  318. /// </summary>
  319. /// <param name="str_sql">SQL命令</param>
  320. /// <returns></returns>
  321. public IDataReader ExecuteReader(string str_sql)
  322. {
  323. IDataReader obj_dr;
  324. if (m_connectionstring.Equals(string.Empty))
  325. {
  326. BuildConnectionString();
  327. }
  328. IDbConnection obj_con = GetDBConnection();
  329. obj_con.ConnectionString = m_connectionstring;
  330. try
  331. {
  332. obj_con.Open();
  333. IDbCommand obj_cmd = GetDBCommand();
  334. obj_cmd.Connection = obj_con;
  335. obj_cmd.CommandText = str_sql;
  336. obj_dr = obj_cmd.ExecuteReader(CommandBehavior.CloseConnection);
  337. }
  338. catch (Exception ex)
  339. {
  340. m_errormsg = ex.ToString();
  341. obj_dr = null;
  342. }
  343. return obj_dr;
  344. }
  345. /// <summary>
  346. /// 异步执行Sql查询
  347. /// </summary>
  348. /// <param name="str_sql">sql查询</param>
  349. /// <param name="callback">回调函数,包含DatabaseAsyncState</param>
  350. /// <returns></returns>
  351. public bool BeginExecuteReader(string str_sql, Action<object> callback)
  352. {
  353. IDataReader obj_dr;
  354. if (m_connectionstring.Equals(string.Empty))
  355. {
  356. BuildConnectionString();
  357. }
  358. IDbConnection obj_con = GetDBConnection();
  359. obj_con.ConnectionString = m_connectionstring;
  360. try
  361. {
  362. obj_con.Open();
  363. IDbCommand obj_cmd = GetDBCommand();
  364. obj_cmd.Connection = obj_con;
  365. obj_cmd.CommandText = str_sql;
  366. obj_dr = obj_cmd.ExecuteReader(CommandBehavior.CloseConnection);
  367. DatabaseAsyncState async_state = new DatabaseAsyncState();
  368. async_state.DbCommand = obj_cmd;
  369. async_state.DataReader = obj_dr;
  370. System.Threading.Thread thread = new System.Threading.Thread(new System.Threading.ParameterizedThreadStart(callback));
  371. thread.Start(async_state);
  372. return true;
  373. }
  374. catch (Exception ex)
  375. {
  376. m_errormsg = ex.ToString();
  377. return false;
  378. }
  379. }
  380. /// <summary>
  381. /// 试图取消IDbCommand的执行
  382. /// </summary>
  383. /// <param name="command">ICommand对象</param>
  384. public void Cancel(IDbCommand command)
  385. {
  386. command.Cancel();
  387. }
  388. /// <summary>
  389. /// 根据数据库访问方式构造数据库连接字符串
  390. /// </summary>
  391. public void BuildConnectionString()
  392. {
  393. switch (m_accessType)
  394. {
  395. case AccessType.MySQLClient:
  396. m_connectionstring = "Server=" + m_databaseparam.DBHost +";Port=" + m_databaseparam.DBPort + ";Database=" + m_databaseparam.DBName + ";Uid=" + m_databaseparam.DBUser + ";Pwd=" + m_databaseparam.DBPassword +";";
  397. if (m_commandtimeout > 0)
  398. {
  399. m_connectionstring += "Default command timeout=" + m_commandtimeout.ToString() +";";
  400. }
  401. if (m_connectiontimeout > 0)
  402. {
  403. m_connectionstring += "Connection timeout=" + m_connectiontimeout +";";
  404. }
  405. break;
  406. case AccessType.MSSQLClient:
  407. m_connectionstring = "Data Source=" + m_databaseparam.DBHost +"," + m_databaseparam.DBPort + ";Initial Catalog=" + m_databaseparam.DBName +";User ID=" + m_databaseparam.DBUser + ";Password=" + m_databaseparam.DBPassword + ";";
  408. break;
  409. case AccessType.OracleDirect:
  410. m_connectionstring = "Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=" + m_databaseparam.DBHost +")(PORT=" + m_databaseparam.DBPort + ")))(CONNECT_DATA=(SERVICE_NAME=" + m_databaseparam.DBName +")));User Id=" + m_databaseparam.DBUser +";Password=" + m_databaseparam.DBPassword +";";
  411. break;
  412. case AccessType.OracleTNS:
  413. m_connectionstring = "Data Source=" + m_databaseparam.DBName +";User Id=" + m_databaseparam.DBUser + ";Password=" + m_databaseparam.DBPassword + ";";
  414. break;
  415. case AccessType.IBMDataDB2:
  416. m_connectionstring = "Server=" + m_databaseparam.DBHost +":" + m_databaseparam.DBPort + ";Database=" + m_databaseparam.DBName +";userid=" + m_databaseparam.DBUser + ";password=" + m_databaseparam.DBPassword+";";
  417. break;
  418. case AccessType.MySQLODBC:
  419. m_connectionstring = "Driver={" + m_providername +"};Server=" + m_databaseparam.DBHost + ";Port=" + m_databaseparam.DBPort + ";Database=" + m_databaseparam.DBName +";Uid=" + m_databaseparam.DBUser + ";Pwd=" + m_databaseparam.DBPassword + ";";
  420. break;
  421. case AccessType.MSSQLODBC:
  422. m_connectionstring = "Driver={" + m_providername +"};Server=" + m_databaseparam.DBHost + ";Port=" + m_databaseparam.DBPort + ";Database=" + m_databaseparam.DBName +";Uid=" + m_databaseparam.DBUser + ";Pwd=" + m_databaseparam.DBPassword + ";";
  423. break;
  424. case AccessType.MSOracleODBC:
  425. m_connectionstring = "Driver={" + m_providername +"};Server=" + m_databaseparam.DBName + ";Uid=" + m_databaseparam.DBUser + ";Pwd=" + m_databaseparam.DBPassword +";";
  426. break;
  427. case AccessType.OracleODBC:
  428. m_connectionstring = "Driver={" + m_providername +"};Server=" + m_databaseparam.DBHost + ";Dbq=" + m_databaseparam.DBName + ";Uid=" + m_databaseparam.DBUser +";Pwd=" + m_databaseparam.DBPassword + ";";
  429. break;
  430. case AccessType.DB2ODBC:
  431. m_connectionstring = "DRIVER={"+m_providername+"};UID=" + m_databaseparam.DBUser +";PWD=" + m_databaseparam.DBPassword + ";PROTOCOL=TCPIP;HOSTNAME=" + m_databaseparam.DBHost +";DATABASE=" + m_databaseparam.DBName + ";PORT=" + m_databaseparam.DBPort + ";";
  432. break;
  433. default:
  434. m_errormsg = "Access type not support.";
  435. break;
  436. }
  437. }
  438. private IDbConnection GetDBConnection()
  439. {
  440. switch (m_accessType)
  441. {
  442. case AccessType.MySQLClient:
  443. MySqlConnection mysql_connection = new MySqlConnection();
  444. return mysql_connection;
  445. case AccessType.MSSQLClient:
  446. SqlConnection mssql_connection = new SqlConnection();
  447. return mssql_connection;
  448. case AccessType.OracleDirect:
  449. case AccessType.OracleTNS:
  450. OracleConnection oracle_connection = new OracleConnection();
  451. return oracle_connection;
  452. case AccessType.IBMDataDB2:
  453. DB2Connection db2_connection = new DB2Connection();
  454. return db2_connection;
  455. case AccessType.MySQLODBC:
  456. case AccessType.MSSQLODBC:
  457. case AccessType.OracleODBC:
  458. case AccessType.MSOracleODBC:
  459. case AccessType.DB2ODBC:
  460. OdbcConnection odbc_connection = new OdbcConnection();
  461. return odbc_connection;
  462. default:
  463. m_errormsg = "Access type not support.";
  464. return null;
  465. }
  466. }
  467. private IDataAdapter GetDataAdapter(string str_sql)
  468. {
  469. switch (m_accessType)
  470. {
  471. case AccessType.MySQLClient:
  472. MySqlConnection mysql_connection = new MySqlConnection(m_connectionstring);
  473. MySqlDataAdapter mysql_dapt = new MySqlDataAdapter(str_sql, mysql_connection);
  474. return mysql_dapt;
  475. case AccessType.MSSQLClient:
  476. SqlConnection mssql_connection = new SqlConnection(m_connectionstring);
  477. SqlDataAdapter mssql_dapt = new SqlDataAdapter(str_sql, mssql_connection);
  478. return mssql_dapt;
  479. case AccessType.OracleDirect:
  480. case AccessType.OracleTNS:
  481. OracleConnection oracle_connection = new OracleConnection(m_connectionstring);
  482. OracleDataAdapter oracle_dapt = new OracleDataAdapter(str_sql, oracle_connection);
  483. return oracle_dapt;
  484. case AccessType.IBMDataDB2:
  485. DB2Connection db2_connection = new DB2Connection(m_connectionstring);
  486. DB2DataAdapter db2_dapt = new DB2DataAdapter(str_sql, db2_connection);
  487. return db2_dapt;
  488. case AccessType.MySQLODBC:
  489. case AccessType.MSSQLODBC:
  490. case AccessType.OracleODBC:
  491. case AccessType.MSOracleODBC:
  492. case AccessType.DB2ODBC:
  493. OdbcConnection odbc_connection = new OdbcConnection(m_connectionstring);
  494. OdbcDataAdapter odbc_dapt = new OdbcDataAdapter(str_sql, odbc_connection);
  495. return odbc_dapt;
  496. default:
  497. m_errormsg = "Access type not support.";
  498. return null;
  499. }
  500. }
  501. private IDbCommand GetDBCommand()
  502. {
  503. switch (m_accessType)
  504. {
  505. case AccessType.MySQLClient:
  506. MySqlCommand mysql_cmd = new MySqlCommand();
  507. return mysql_cmd;
  508. case AccessType.MSSQLClient:
  509. SqlCommand mssql_cmd = new SqlCommand();
  510. return mssql_cmd;
  511. case AccessType.OracleDirect:
  512. case AccessType.OracleTNS:
  513. OracleCommand oracle_cmd = new OracleCommand();
  514. return oracle_cmd;
  515. case AccessType.IBMDataDB2:
  516. DB2Command db2_cmd = new DB2Command();
  517. return db2_cmd;
  518. case AccessType.MySQLODBC:
  519. case AccessType.MSSQLODBC:
  520. case AccessType.OracleODBC:
  521. case AccessType.MSOracleODBC:
  522. case AccessType.DB2ODBC:
  523. OdbcCommand odbc_cmd = new OdbcCommand();
  524. return odbc_cmd;
  525. default:
  526. m_errormsg = "Access type not support.";
  527. return null;
  528. }
  529. }
  530. }
[csharp] view plaincopyprint?
  1. /// <summary>
  2. /// 访问数据库,提供连接、查询、执行SQL等数据库访问功能
  3. /// author:Charley
  4. /// date:2012/4/30
  5. /// </summary>
  6. public class DataBaseAccess
  7. {
  8. private DatabaseParam m_databaseparam;
  9. /// <summary>
  10. /// 获取或设置数据库参数
  11. /// </summary>
  12. public DatabaseParam DatabaseParam
  13. {
  14. get { return m_databaseparam; }
  15. set { m_databaseparam = value; }
  16. }
  17. private string m_errormsg;
  18. /// <summary>
  19. /// 获取内部操作操作错误信息,得到上一步操作的错误消息
  20. /// </summary>
  21. public string ErrorMsg
  22. {
  23. get { return m_errormsg; }
  24. }
  25. private string m_connectionstring;
  26. /// <summary>
  27. /// 获取或设置数据库连接字符串
  28. /// </summary>
  29. public string ConnectionString
  30. {
  31. get { return m_connectionstring; }
  32. set { m_connectionstring = value; }
  33. }
  34. private AccessType m_accessType;
  35. /// <summary>
  36. /// 设置数据库访问方式
  37. /// </summary>
  38. public AccessType AccessType
  39. {
  40. set { m_accessType = value; }
  41. }
  42. private string m_providername;
  43. /// <summary>
  44. /// 设置数据提供者名称,用于ODBC连接
  45. /// </summary>
  46. public string ProviderName
  47. {
  48. //get { return m_providername; }
  49. set { m_providername = value; }
  50. }
  51. private int m_commandtimeout;
  52. /// <summary>
  53. /// 设置命令执行的超时时间,0:不限制,即采用数据库默认值
  54. /// </summary>
  55. public int CommandTimeout
  56. {
  57. set { m_commandtimeout = value; }
  58. }
  59. private int m_connectiontimeout;
  60. /// <summary>
  61. /// 设置数据库连接超时时间,0:不限制,即采用数据库默认值
  62. /// </summary>
  63. public int ConnectionTimeout
  64. {
  65. set { m_connectiontimeout = value; }
  66. }
  67. /// <summary>
  68. ///使用默认值构造
  69. /// </summary>
  70. public DataBaseAccess()
  71. {
  72. m_databaseparam = new DatabaseParam();
  73. m_accessType = AccessType.MySQLClient;
  74. m_errormsg = string.Empty;
  75. m_connectionstring = string.Empty;
  76. m_providername = string.Empty;
  77. m_commandtimeout = 0;
  78. m_connectiontimeout = 0;
  79. }
  80. /// <summary>
  81. /// 指定数据库参数构造
  82. /// </summary>
  83. /// <param name="database_param">数据库参数</param>
  84. public DataBaseAccess(DatabaseParam database_param)
  85. : this()
  86. {
  87. m_databaseparam = database_param;
  88. }
  89. /// <summary>
  90. /// 指定数据库参数及数据库访问类型构造
  91. /// </summary>
  92. /// <param name="database_param">数据库参数</param>
  93. /// <param name="access_type">数据库访问类型</param>
  94. public DataBaseAccess(DatabaseParam database_param, AccessType access_type)
  95. : this()
  96. {
  97. m_databaseparam = database_param;
  98. m_accessType = access_type;
  99. }
  100. /// <summary>
  101. /// 清除内部错误消息
  102. /// </summary>
  103. public void ClearMessage()
  104. {
  105. m_errormsg = string.Empty;
  106. }
  107. /// <summary>
  108. /// 测试数据库连接
  109. /// 连接成功:true
  110. /// 连接失败:False
  111. /// </summary>
  112. /// <returns></returns>
  113. public bool TestConnection()
  114. {
  115. bool b_return = false;
  116. if (m_connectionstring.Equals(string.Empty))
  117. {
  118. BuildConnectionString();
  119. }
  120. IDbConnection obj_connection = GetDBConnection();
  121. obj_connection.ConnectionString = m_connectionstring;
  122. try
  123. {
  124. obj_connection.Open();
  125. b_return = true;
  126. }
  127. catch (Exception ex)
  128. {
  129. m_errormsg = ex.ToString();
  130. }
  131. finally
  132. {
  133. if (obj_connection.State == ConnectionState.Open)
  134. {
  135. obj_connection.Close();
  136. }
  137. }
  138. return b_return;
  139. }
  140. /// <summary>
  141. /// 获取记录行数
  142. /// 返回 -1 指示操作有错误
  143. /// </summary>
  144. /// <param name="str_sql">查询语句</param>
  145. /// <returns></returns>
  146. public int GetRecordNum(string str_sql)
  147. {
  148. DataSet obj_ds = GetDataSet(str_sql);
  149. if (obj_ds == null || obj_ds.Tables.Count <= 0)
  150. {
  151. return -1;
  152. }
  153. return obj_ds.Tables[0].Rows.Count;
  154. }
  155. /// <summary>
  156. /// 获取指定列的值
  157. /// 返回 DATABASE_RETURN_ERROR 指示操作有错误
  158. /// </summary>
  159. /// <param name="str_sql">查询语句</param>
  160. /// <param name="column_name">列名</param>
  161. /// <returns></returns>
  162. public string GetStringValue(string column_name,string str_sql)
  163. {
  164. string s_return =string.Empty;
  165. DataRow obj_dr = GetFirstRecord(str_sql);
  166. if (obj_dr == null)
  167. {
  168. s_return = DatabaseDefinitions.DATABASE_RETURN_ERROR;
  169. return s_return;
  170. }
  171. try
  172. {
  173. s_return = obj_dr[column_name].ToString();
  174. }
  175. catch (Exception ex)
  176. {
  177. m_errormsg = ex.ToString();
  178. s_return = DatabaseDefinitions.DATABASE_RETURN_ERROR;
  179. return s_return;
  180. }
  181. return s_return;
  182. }
  183. /// <summary>
  184. /// 获取第一条记录
  185. /// 返回 null 指示操作有错误
  186. /// </summary>
  187. /// <param name="str_sql">查询语句</param>
  188. /// <returns></returns>
  189. public DataRow GetFirstRecord(string str_sql)
  190. {
  191. DataSet obj_ds = GetDataSet(str_sql);
  192. if (obj_ds == null || obj_ds.Tables.Count <= 0)
  193. {
  194. return null;
  195. }
  196. int count = obj_ds.Tables[0].Rows.Count;
  197. if (count == 0)
  198. {
  199. m_errormsg = "No Record.";
  200. return null;
  201. }
  202. return obj_ds.Tables[0].Rows[0];
  203. }
  204. /// <summary>
  205. /// 获取数据集
  206. /// 返回 null 指示操作有错误
  207. /// </summary>
  208. /// <param name="str_sql">查询语句</param>
  209. /// <returns></returns>
  210. public DataSet GetDataSet(string str_sql)
  211. {
  212. DataSet obj_ds = new DataSet();
  213. if (m_connectionstring.Equals(string.Empty))
  214. {
  215. BuildConnectionString();
  216. }
  217. IDataAdapter obj_dapt = GetDataAdapter(str_sql);
  218. try
  219. {
  220. obj_dapt.Fill(obj_ds);
  221. if (obj_ds.Tables.Count <= 0)
  222. {
  223. m_errormsg = "No table.";
  224. obj_ds = null;
  225. }
  226. }
  227. catch (Exception ex)
  228. {
  229. m_errormsg = ex.ToString();
  230. obj_ds = null;
  231. }
  232. return obj_ds;
  233. }
  234. /// <summary>
  235. /// 执行SQL命令,返回受影响的行数
  236. /// 返回 -2 指示操作有错误
  237. /// 返回 -1 指示执行DDL命令
  238. /// </summary>
  239. /// <param name="str_sql">SQL命令</param>
  240. /// <returns></returns>
  241. public int ExecuteCommand(string str_sql)
  242. {
  243. int i_return = -2;
  244. if (m_connectionstring.Equals(string.Empty))
  245. {
  246. BuildConnectionString();
  247. }
  248. IDbConnection obj_con = GetDBConnection();
  249. obj_con.ConnectionString = m_connectionstring;
  250. IDbCommand obj_cmd = GetDBCommand();
  251. try
  252. {
  253. obj_con.Open();
  254. obj_cmd.Connection = obj_con;
  255. obj_cmd.CommandText = str_sql;
  256. return obj_cmd.ExecuteNonQuery();
  257. }
  258. catch (Exception ex)
  259. {
  260. m_errormsg = ex.ToString();
  261. i_return = -2;
  262. }
  263. finally
  264. {
  265. if (obj_con.State == ConnectionState.Open)
  266. {
  267. obj_con.Close();
  268. }
  269. }
  270. return i_return;
  271. }
  272. /// <summary>
  273. /// 执行存储过程
  274. /// </summary>
  275. /// <typeparam name="T">DataParameter参数类型,实现IDataParameter接口</typeparam>
  276. /// <param name="proc_name">存储过程名称</param>
  277. /// <param name="parameters">参数列表</param>
  278. /// <returns></returns>
  279. public bool ExecuteProcedure<T>(string proc_name,ref T[] parameters) where T : IDataParameter
  280. {
  281. bool b_return = false;
  282. if (m_connectionstring.Equals(string.Empty))
  283. {
  284. BuildConnectionString();
  285. }
  286. IDbConnection obj_con = GetDBConnection();
  287. obj_con.ConnectionString = m_connectionstring;
  288. try
  289. {
  290. obj_con.Open();
  291. IDbCommand obj_cmd = GetDBCommand();
  292. obj_cmd.Connection = obj_con;
  293. obj_cmd.CommandType = CommandType.StoredProcedure;
  294. obj_cmd.CommandText = proc_name;
  295. foreach (T parameterin parameters)
  296. {
  297. obj_cmd.Parameters.Add(parameter);
  298. }
  299. obj_cmd.ExecuteNonQuery();
  300. b_return = true;
  301. }
  302. catch (Exception ex)
  303. {
  304. m_errormsg = ex.ToString();
  305. b_return = false;
  306. }
  307. finally
  308. {
  309. if (obj_con.State == ConnectionState.Open)
  310. {
  311. obj_con.Close();
  312. }
  313. }
  314. return b_return;
  315. }
  316. /// <summary>
  317. /// 执行SQL命令,返回数据读取器DataReader
  318. /// </summary>
  319. /// <param name="str_sql">SQL命令</param>
  320. /// <returns></returns>
  321. public IDataReader ExecuteReader(string str_sql)
  322. {
  323. IDataReader obj_dr;
  324. if (m_connectionstring.Equals(string.Empty))
  325. {
  326. BuildConnectionString();
  327. }
  328. IDbConnection obj_con = GetDBConnection();
  329. obj_con.ConnectionString = m_connectionstring;
  330. try
  331. {
  332. obj_con.Open();
  333. IDbCommand obj_cmd = GetDBCommand();
  334. obj_cmd.Connection = obj_con;
  335. obj_cmd.CommandText = str_sql;
  336. obj_dr = obj_cmd.ExecuteReader(CommandBehavior.CloseConnection);
  337. }
  338. catch (Exception ex)
  339. {
  340. m_errormsg = ex.ToString();
  341. obj_dr = null;
  342. }
  343. return obj_dr;
  344. }
  345. /// <summary>
  346. /// 异步执行Sql查询
  347. /// </summary>
  348. /// <param name="str_sql">sql查询</param>
  349. /// <param name="callback">回调函数,包含DatabaseAsyncState</param>
  350. /// <returns></returns>
  351. public bool BeginExecuteReader(string str_sql, Action<object> callback)
  352. {
  353. IDataReader obj_dr;
  354. if (m_connectionstring.Equals(string.Empty))
  355. {
  356. BuildConnectionString();
  357. }
  358. IDbConnection obj_con = GetDBConnection();
  359. obj_con.ConnectionString = m_connectionstring;
  360. try
  361. {
  362. obj_con.Open();
  363. IDbCommand obj_cmd = GetDBCommand();
  364. obj_cmd.Connection = obj_con;
  365. obj_cmd.CommandText = str_sql;
  366. obj_dr = obj_cmd.ExecuteReader(CommandBehavior.CloseConnection);
  367. DatabaseAsyncState async_state = new DatabaseAsyncState();
  368. async_state.DbCommand = obj_cmd;
  369. async_state.DataReader = obj_dr;
  370. System.Threading.Thread thread = new System.Threading.Thread(new System.Threading.ParameterizedThreadStart(callback));
  371. thread.Start(async_state);
  372. return true;
  373. }
  374. catch (Exception ex)
  375. {
  376. m_errormsg = ex.ToString();
  377. return false;
  378. }
  379. }
  380. /// <summary>
  381. /// 试图取消IDbCommand的执行
  382. /// </summary>
  383. /// <param name="command">ICommand对象</param>
  384. public void Cancel(IDbCommand command)
  385. {
  386. command.Cancel();
  387. }
  388. /// <summary>
  389. /// 根据数据库访问方式构造数据库连接字符串
  390. /// </summary>
  391. public void BuildConnectionString()
  392. {
  393. switch (m_accessType)
  394. {
  395. case AccessType.MySQLClient:
  396. m_connectionstring = "Server=" + m_databaseparam.DBHost +";Port=" + m_databaseparam.DBPort + ";Database=" + m_databaseparam.DBName + ";Uid=" + m_databaseparam.DBUser + ";Pwd=" + m_databaseparam.DBPassword +";";
  397. if (m_commandtimeout > 0)
  398. {
  399. m_connectionstring += "Default command timeout=" + m_commandtimeout.ToString() +";";
  400. }
  401. if (m_connectiontimeout > 0)
  402. {
  403. m_connectionstring += "Connection timeout=" + m_connectiontimeout +";";
  404. }
  405. break;
  406. case AccessType.MSSQLClient:
  407. m_connectionstring = "Data Source=" + m_databaseparam.DBHost +"," + m_databaseparam.DBPort + ";Initial Catalog=" + m_databaseparam.DBName +";User ID=" + m_databaseparam.DBUser + ";Password=" + m_databaseparam.DBPassword + ";";
  408. break;
  409. case AccessType.OracleDirect:
  410. m_connectionstring = "Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=" + m_databaseparam.DBHost +")(PORT=" + m_databaseparam.DBPort + ")))(CONNECT_DATA=(SERVICE_NAME=" + m_databaseparam.DBName +")));User Id=" + m_databaseparam.DBUser +";Password=" + m_databaseparam.DBPassword +";";
  411. break;
  412. case AccessType.OracleTNS:
  413. m_connectionstring = "Data Source=" + m_databaseparam.DBName +";User Id=" + m_databaseparam.DBUser + ";Password=" + m_databaseparam.DBPassword + ";";
  414. break;
  415. case AccessType.IBMDataDB2:
  416. m_connectionstring = "Server=" + m_databaseparam.DBHost +":" + m_databaseparam.DBPort + ";Database=" + m_databaseparam.DBName +";userid=" + m_databaseparam.DBUser + ";password=" + m_databaseparam.DBPassword+";";
  417. break;
  418. case AccessType.MySQLODBC:
  419. m_connectionstring = "Driver={" + m_providername +"};Server=" + m_databaseparam.DBHost + ";Port=" + m_databaseparam.DBPort + ";Database=" + m_databaseparam.DBName +";Uid=" + m_databaseparam.DBUser + ";Pwd=" + m_databaseparam.DBPassword + ";";
  420. break;
  421. case AccessType.MSSQLODBC:
  422. m_connectionstring = "Driver={" + m_providername +"};Server=" + m_databaseparam.DBHost + ";Port=" + m_databaseparam.DBPort + ";Database=" + m_databaseparam.DBName +";Uid=" + m_databaseparam.DBUser + ";Pwd=" + m_databaseparam.DBPassword + ";";
  423. break;
  424. case AccessType.MSOracleODBC:
  425. m_connectionstring = "Driver={" + m_providername +"};Server=" + m_databaseparam.DBName + ";Uid=" + m_databaseparam.DBUser + ";Pwd=" + m_databaseparam.DBPassword +";";
  426. break;
  427. case AccessType.OracleODBC:
  428. m_connectionstring = "Driver={" + m_providername +"};Server=" + m_databaseparam.DBHost + ";Dbq=" + m_databaseparam.DBName + ";Uid=" + m_databaseparam.DBUser +";Pwd=" + m_databaseparam.DBPassword + ";";
  429. break;
  430. case AccessType.DB2ODBC:
  431. m_connectionstring = "DRIVER={"+m_providername+"};UID=" + m_databaseparam.DBUser +";PWD=" + m_databaseparam.DBPassword + ";PROTOCOL=TCPIP;HOSTNAME=" + m_databaseparam.DBHost +";DATABASE=" + m_databaseparam.DBName + ";PORT=" + m_databaseparam.DBPort + ";";
  432. break;
  433. default:
  434. m_errormsg = "Access type not support.";
  435. break;
  436. }
  437. }
  438. private IDbConnection GetDBConnection()
  439. {
  440. switch (m_accessType)
  441. {
  442. case AccessType.MySQLClient:
  443. MySqlConnection mysql_connection = new MySqlConnection();
  444. return mysql_connection;
  445. case AccessType.MSSQLClient:
  446. SqlConnection mssql_connection = new SqlConnection();
  447. return mssql_connection;
  448. case AccessType.OracleDirect:
  449. case AccessType.OracleTNS:
  450. OracleConnection oracle_connection = new OracleConnection();
  451. return oracle_connection;
  452. case AccessType.IBMDataDB2:
  453. DB2Connection db2_connection = new DB2Connection();
  454. return db2_connection;
  455. case AccessType.MySQLODBC:
  456. case AccessType.MSSQLODBC:
  457. case AccessType.OracleODBC:
  458. case AccessType.MSOracleODBC:
  459. case AccessType.DB2ODBC:
  460. OdbcConnection odbc_connection = new OdbcConnection();
  461. return odbc_connection;
  462. default:
  463. m_errormsg = "Access type not support.";
  464. return null;
  465. }
  466. }
  467. private IDataAdapter GetDataAdapter(string str_sql)
  468. {
  469. switch (m_accessType)
  470. {
  471. case AccessType.MySQLClient:
  472. MySqlConnection mysql_connection = new MySqlConnection(m_connectionstring);
  473. MySqlDataAdapter mysql_dapt = new MySqlDataAdapter(str_sql, mysql_connection);
  474. return mysql_dapt;
  475. case AccessType.MSSQLClient:
  476. SqlConnection mssql_connection = new SqlConnection(m_connectionstring);
  477. SqlDataAdapter mssql_dapt = new SqlDataAdapter(str_sql, mssql_connection);
  478. return mssql_dapt;
  479. case AccessType.OracleDirect:
  480. case AccessType.OracleTNS:
  481. OracleConnection oracle_connection = new OracleConnection(m_connectionstring);
  482. OracleDataAdapter oracle_dapt = new OracleDataAdapter(str_sql, oracle_connection);
  483. return oracle_dapt;
  484. case AccessType.IBMDataDB2:
  485. DB2Connection db2_connection = new DB2Connection(m_connectionstring);
  486. DB2DataAdapter db2_dapt = new DB2DataAdapter(str_sql, db2_connection);
  487. return db2_dapt;
  488. case AccessType.MySQLODBC:
  489. case AccessType.MSSQLODBC:
  490. case AccessType.OracleODBC:
  491. case AccessType.MSOracleODBC:
  492. case AccessType.DB2ODBC:
  493. OdbcConnection odbc_connection = new OdbcConnection(m_connectionstring);
  494. OdbcDataAdapter odbc_dapt = new OdbcDataAdapter(str_sql, odbc_connection);
  495. return odbc_dapt;
  496. default:
  497. m_errormsg = "Access type not support.";
  498. return null;
  499. }
  500. }
  501. private IDbCommand GetDBCommand()
  502. {
  503. switch (m_accessType)
  504. {
  505. case AccessType.MySQLClient:
  506. MySqlCommand mysql_cmd = new MySqlCommand();
  507. return mysql_cmd;
  508. case AccessType.MSSQLClient:
  509. SqlCommand mssql_cmd = new SqlCommand();
  510. return mssql_cmd;
  511. case AccessType.OracleDirect:
  512. case AccessType.OracleTNS:
  513. OracleCommand oracle_cmd = new OracleCommand();
  514. return oracle_cmd;
  515. case AccessType.IBMDataDB2:
  516. DB2Command db2_cmd = new DB2Command();
  517. return db2_cmd;
  518. case AccessType.MySQLODBC:
  519. case AccessType.MSSQLODBC:
  520. case AccessType.OracleODBC:
  521. case AccessType.MSOracleODBC:
  522. case AccessType.DB2ODBC:
  523. OdbcCommand odbc_cmd = new OdbcCommand();
  524. return odbc_cmd;
  525. default:
  526. m_errormsg = "Access type not support.";
  527. return null;
  528. }
  529. }
  530. }


使用示例:

[csharp] view plaincopyprint?
  1. DatabaseParam database_param = new DatabaseParam();
  2. database_param.DBType = 1;
  3. database_param.DBHost = txt_serverName.Text;
  4. database_param.DBPort = int.Parse(txt_serverPort.Text);
  5. database_param.DBName = txt_dbName.Text;
  6. database_param.DBUser = txt_loginName.Text;
  7. database_param.DBPassword = txt_loginPwd.Password;
  8. App.G_VMCDatabaseHelper = new DataBaseAccess(database_param,AccessType.MySQLClient);
  9. App.G_VMCDatabaseHelper.ClearMessage();
  10. if (App.G_VMCDatabaseHelper.TestConnection())
  11. {
  12. }
  13. else
  14. {
  15. App.G_LogOperator.WriteOperationLog("WLogin->Login","Connect to database fail.\r\n" + App.G_VMCDatabaseHelper.ErrorMsg);
  16. ShowErrorMessageBox("Connect to database fail.");
  17. return;
  18. }