采用泛型链接多类型数据库[含源码]
最近在看vs2005上关于泛型的介绍,同时考虑到手头上使用的DBSERVICE库中文件过多(共7个CS文件),想利用泛型技术对它进行“瘦身”,最后系统只有2个文件。现把相关文件做一简单说明:
说明:DbAccess.cs文件, InitailDB函数采用反射进行相关信息搜集
 1
 /// <summary> 
2
        /// 初始化数据库信息 
3
        /// </summary> 
4
        /// <typeparam name="T"></typeparam> 
5
        /// <param name="dai"></param> 
6
        public static void InitailDB<T>(T dai) 
7
        { 
8
            Type type = dai.GetType(); 
9
            object[] args = null;  
10
            concreteDbConn = (IDbConnection)type.GetMethod("CreateConnection").Invoke(dai, args); 
11
            concreteDbConn.ConnectionString = (string) type.GetMethod("GetConnectionString").Invoke(dai, args); 
12
            concreteDbConn.Open(); 
13
            concreteDbCommand = (IDbCommand)type.GetMethod("CreateCommand").Invoke(dai, args); 
14
            concreteDbTrans = (IDbTransaction)type.GetMethod("CreateTransaction").Invoke(dai, new object[] { concreteDbConn }); 
15
            concreteDbCommand.Connection = concreteDbConn; 
16
            concreteDbCommand.Transaction = concreteDbTrans; 
17
            concreteDbAdapter = (IDbDataAdapter)type.GetMethod("CreateDataAdapter").Invoke(dai, args); 
18
        } 
19
 
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
        
   调用方法:CreateGenericInstance(),只要将相应的类型做为参数加入到InitailDB<T>中即可
    InitailDB<Generic_Access<SqlConnection, SqlCommand, SqlDataAdapter>>( 
                            Generic_Access < SqlConnection, SqlCommand, SqlDataAdapter >.GetInstance());break; 
    泛型类DB_Generic.cs代码如下 :    
最后是测试代码:using DB_Generic;
 1
public partial class DB_Generic_Default : System.Web.UI.Page 
2
  { 
3
    protected void Page_Load(object sender, EventArgs e) 
4
    { 
5
        if (!Page.IsPostBack) 
6
        { 
7
            
8
            Response.Write(DbAccess.SelectMaxID("users", "ID") + "<BR>"); 
9
 
10
            string sql = "Select top 10 * From users Order By id asc"; 
11
            Repeater1.DataSource = DbAccess.SelectAllSqlString(sql).Tables[0].DefaultView; 
12
            Repeater1.DataBind(); 
13
 
14
2
3
4
5
6
7
8
9
10
11
12
13
14
.....
详情见 源代码
谢谢大家!
如须转载,请注明出处。
                    
                
                
            
        
浙公网安备 33010602011771号