今天学习数据类的封装.因我用了两个数据库(Access)和Sql,所以就想封装一个类来操作这两类数据库
但是碰上麻烦了,操作这两个数据库的类根本不一样
1.Sql数据库用的类:
SqlCommand;
SqlConnection;
SqlDataAdapter;
2.Access数据库有的类:
OledbCommand;
OledbConnection;
OledbDataAdapter;
在网上查了半天,我就想用预编译,和给类起个别名来实现,
一顿操作后发现可行,也连上数据库了,哈哈!
要操作哪个数据库在类文件第一行用#define来定义
下面的代码是定义操作Access数据库的,所在在第一行就定义了个#define OLEDB_
如果用Sql数据库就把上面的定义改为#define SQL_就可以了
在类中用using重新定义上面三种操作类
using MyConnectin = OleDbConnection;
using MyCommand = OleDbCommand;
using MyDataAdapter = OleDbDataAdapter;
using MyCommandBuilder = OleDbCommandBuilder;
//其他要用的类…
用#if...#else....#endf
来判断自己定义的类是用的哪种
相当于C++中的字符编码重定义一样
唯一的不好就是只能在这个文件中定义,#delfine
要手动修改,不能编成DLL文件,也许有方法我还没发现,以后知道了再说吧
在别的文件中定义就好像管不到这个类
#define OLEDB_
using System.Data;
using System.Data.SqlClient;
using System.Data.OleDb;
namespace MYDATACLASS
{
#if OLEDB_
using MyConnectin = OleDbConnection;
using MyCommand = OleDbCommand;
using MyDataAdapter = OleDbDataAdapter;
using MyCommandBuilder = OleDbCommandBuilder;
#elif SQL_
using MyCommand = SqlCommand;
using MyConnectin = SqlConnection;
using MyDataAdapter = SqlDataAdapter;
//....
#endif
internal class MyDBAdo
{
private MyConnectin conn = null;
public MyDBAdo() { }
~MyDBAdo()
{
CloseConn();
}
public bool OpenConn(string connStr)
{
try
{
conn = new MyConnectin(connStr);
conn.Open();
if (conn.State == ConnectionState.Open)
return true;
return false;
}
catch (System.Exception ex)
{
throw new System.Exception("数据库连接错误:" + ex.Message);
}
}
}