一个基础数据访问库

在新的公司一切都非常原始,不知能不能改变.坚持一下看下不能改变实际不行再选其他路:
似乎公司现有员工对持久层不能愿意,为了方便自己开发只好写一个helper(公司用.net1.1,我的框架也无用武之地).虽然是个ado的helper但出发点还把command抽象一次来实现DAL的数据库无关性.
代码直接贴出来了,有需要朋友可以得到一个思路.
public abstract class ConnBase:IDisposable    
    
{
        
public ConnBase(string connectionstring)
        
{
            mConnection 
= CreateConnection(connectionstring); 
            mConnection.Open();
        }


        
abstract

        
public IDataParameter CreateParameter(string name,object value)
        
{
            IDataParameter dp 
= CreateParameter();
            dp.ParameterName 
= NamePrefix+ name;
            dp.Value 
= value;
            
return dp;
        }

        
public IDataParameter CreateParameter(string name,object value,ParameterDirection pd)
        
{
            IDataParameter dp 
= CreateParameter(name,value);
            dp.Direction 
= pd;
            
return dp;
        }

        
public IDbCommand CreateCommand(String sql,CommandType ct, params IDataParameter[] paramters)
        
{
            IDbCommand cmd 
= CreateCommand(sql,paramters);
            cmd.CommandType 
= ct;
            
return cmd;
        }

        
public  IDbCommand CreateCommand(string sql,params IDataParameter[] paramters)
        
{
            IDbCommand cmd 
= CreateCommand(sql);
            
if(paramters != null)
            
{
                
foreach(IDataParameter dp in paramters)
                
{
                    cmd.Parameters.Add(dp);
                }

            }

            
return cmd;
            

        }

                                  
        
private IDbConnection mConnection;
        
protected IDbConnection Connection
        
{
            
get
            
{
                
return mConnection;
            }

        
        }

        
private IDbTransaction mTransaction;
        
protected IDbTransaction Transaction
        
{
            
get
            
{
                
return mTransaction;
            }


        }

        
public void BeginTran()
        
{
            mTransaction 
= Connection.BeginTransaction();
        }

        
public void Commit()
        
{
            mTransaction.Commit();
            mTransaction 
= null;
        }

        
        
public int ExecuteNonQuery(Command cmd)
        
{
            
return cmd.CreateCommand(this).ExecuteNonQuery();
        }

        
public  IDataReader ExecuteReader(Command cmd)
        
{
            
return cmd.CreateCommand(this).ExecuteReader();
        }

        
        
public  object ExecuteScalar(Command cmd)
        
{
            
return cmd.CreateCommand(this).ExecuteScalar();
            
        }

    
        
public DataSet ExecuteDataSet(Command cmd)
        
{
            IDbDataAdapter adapter 
= CreateAdapter();
            adapter.SelectCommand 
= cmd.CreateCommand(this);
            DataSet ds 
= new DataSet();
            adapter.Fill(ds);
            
return ds;
        }

        
public IDataParameter[] CopyToParameter(IList parameters)
        
{
            Array ap 
=  Array.CreateInstance(typeof(IDataParameter),parameters.Count);
            parameters.CopyTo(ap,
0);
            
return (IDataParameter[])ap;
        }


        
IDisposable 成员
    }

public class Command
    
{
        
public Command(string text)
        
{
            Text 
= text;
        }

        
private string mText;
        
public string Text
        
{
            
get
            
{
                
return mText;
            }

            
set
            
{
                mText 
= value;
            }

        }

        
private CommandType mCommandType;
        
public CommandType CommandType
        
{
            
get
            
{
                
return mCommandType;
            }

            
set
            
{
                mCommandType 
= value;
            }

            
        }

        
private ArrayList mParameters = new ArrayList();
        
public ArrayList Parameters
        
{
            
get
            
{
                
return mParameters;
            }

        }


        
public void AddParameter(string name,string value)
        
{
            AddParameter(name,value,ParameterDirection.Input);
        }

        
public void AddParameter(string name,string value,ParameterDirection pd)
        
{
            Parameter p 
= new Parameter();
            p.Name 
= name;
            p.Value 
= value;
            p.Direction 
= pd;
            Parameters.Add(p);
        }

        
public class Parameter
        
{
            
private string mName;
            
public string Name
            
{
                
get
                
{
                    
return mName;
                }

                
set
                
{
                    mName 
= value;
                }

            }

            
private object mValue;
            
public object Value
            
{
                
get
                
{
                    
return mValue;
                }

                
set
                
{
                    mValue 
= value;
                }

            }

            
private ParameterDirection mDirection = ParameterDirection.Input;
            
public ParameterDirection Direction
            
{
                
get
                
{
                    
return mDirection;
                }

                
set
                
{
                    mDirection 
= value;
                }

            }

        }

        
public IDbCommand CreateCommand(ConnBase conn)
        
{
            IDbCommand cmd 
= conn.CreateCommand(Text);
            cmd.CommandType 
= CommandType;
            
foreach(Parameter p in Parameters)
            
{
                cmd.Parameters.Add(conn.CreateParameter(p.Name,p.Value,p.Direction));
            }

            
return cmd;
        }

    }

    public class OracleConn:ConnBase
    
{
        
public OracleConn(string connstring):base(connstring){}
        
public override IDbDataAdapter CreateAdapter()
        
{
            
return new OracleDataAdapter();
        }

        
public override IDbCommand CreateCommand(string sql)
        
{
            IDbCommand cmd
= new OracleCommand(sql);
            cmd.Connection 
= Connection;
            
if(Transaction != null)
                cmd.Transaction 
= Transaction;
            
return cmd;
            
        }

        
protected override IDbConnection CreateConnection(string connectionstring)
        
{
            
return new OracleConnection(connectionstring);

        }

        
        
public override IDataParameter CreateParameter()
        
{
            
return new OracleParameter();
        }


        
protected override string NamePrefix
        
{
            
get
            
{
                
return ":";
            }

        }





    }

    
public class MSSql:ConnBase
    
{
        
public MSSql(string connstring):base(connstring){}
        
public override IDbDataAdapter CreateAdapter()
        
{
            
return new SqlDataAdapter() ;
        }

        
public override IDbCommand CreateCommand(string sql)
        
{
            IDbCommand cmd
= new SqlCommand(sql);
            cmd.Connection 
= Connection;
            
if(Transaction != null)
                cmd.Transaction 
= Transaction;
            
return cmd;
        }

        
protected override IDbConnection CreateConnection(string connectionstring)
        
{
            
return new SqlConnection(connectionstring);
        }

        
public override IDataParameter CreateParameter()
        
{
            
return new SqlParameter();
        }

        
protected override string NamePrefix
        
{
            
get
            
{
                
return "@";
            }

        }






    }


    
public class Access:ConnBase
    
{
        
public Access(string connstring):base(connstring){}
        
public override IDbDataAdapter CreateAdapter()
        
{
            
return new OleDbDataAdapter();
        }

        
public override IDbCommand CreateCommand(string sql)
        
{
            IDbCommand cmd 
= new OleDbCommand(sql);
            cmd.Connection 
= Connection;
            
if(Transaction != null)
                cmd.Transaction 
= Transaction;
            
return cmd;
        }

        
protected override IDbConnection CreateConnection(string connectionstring)
        
{
            
return new OleDbConnection(connectionstring);
                                          
        }

        
public override IDataParameter CreateParameter()
        
{
            
return new OleDbParameter();
        }

        
protected override string NamePrefix
        
{
            
get
            
{
                
return "@";
            }

        }





    }




posted on 2008-04-25 17:39 henry 阅读(2466) 评论(15) 编辑 收藏

评论

#1楼 2008-04-25 18:14 灵感试验室      

这吗老的公司,还是换一家吧!如今都3.5时代了!  回复 引用 查看   

#2楼 2008-04-25 19:07 让风吹--笨牛      

我公司也是1.1.....  回复 引用 查看   

#3楼 2008-04-25 19:11 asdklwidnf[未注册用户]

1111111111111
 回复 引用   

#4楼 2008-04-25 19:12 Dorian Deng      

Enterprise Library 的数据访问应用程序块其实一般都够用了。
《Enterprise Library 中文文档》http://wiki.entlib.net.cn
 回复 引用 查看   

#5楼 2008-04-25 19:29 西南药业[未注册用户]

我用SqlHelper
复杂的用 Microsoft.Practices.EnterpriseLibrary.Data;
 回复 引用   

#6楼 2008-04-25 21:04 zhuanming[未注册用户]

1.1 没什么不好  回复 引用   

#7楼 2008-04-26 01:48 狼Robot      

1.1也没什么不好的.做好了就好.  回复 引用 查看   

#8楼 2008-04-26 09:48 程序员相轻      

 回复 引用 查看   

#9楼[楼主] 2008-04-26 09:59 henry      

从稳定性和代码安全性上1.1和2.0是不能比的。
虽然程序本质没有变,但在语言特性和IDE的支持效率和质量都相对好把握很多(总得来说减轻开发人的工作量,更多的时间去思考问题)。
 回复 引用 查看   

#10楼 2008-04-26 13:34 niuniu[未注册用户]

还不如 ADOKeycap 呢  回复 引用   

#11楼[楼主] 2008-04-26 14:44 henry      

@niuniu
你很会开玩笑:)
 回复 引用 查看   

#12楼 2008-04-26 18:11 阿森纳      

继续学习C#基础知识  回复 引用 查看   

#13楼 2008-04-27 20:32 镜涛      

--引用--------------------------------------------------
狼Robot: 1.1也没什么不好的.做好了就好.
--------------------------------------------------------
 回复 引用 查看   

#14楼 2008-04-28 10:56 Peter Li      

什么时代?  回复 引用 查看   

#15楼 2008-05-01 02:02 wtw[未注册用户]

最不想看的就是大段大段没注释的代码  回复 引用   

导航

公告

昵称:henry
园龄:6年5个月
粉丝:14
关注:0
<2008年4月>
303112345
6789101112
13141516171819
20212223242526
27282930123
45678910

统计

搜索

 
 

常用链接

我的标签

随笔分类

最新评论

推荐排行榜