posts - 185,  comments - 1070,  trackbacks - 43
在新的公司一切都非常原始,不知能不能改变.坚持一下看下不能改变实际不行再选其他路:
似乎公司现有员工对持久层不能愿意,为了方便自己开发只好写一个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 阅读(2373) 评论(15)  编辑 收藏 网摘

FeedBack:
2008-04-25 18:14 | 灵感试验室      
这吗老的公司,还是换一家吧!如今都3.5时代了!
  回复  引用  查看    
2008-04-25 19:07 | 让风吹--笨牛      
我公司也是1.1.....
  回复  引用  查看    
2008-04-25 19:11 | asdklwidnf[未注册用户]
1111111111111

  回复  引用    
2008-04-25 19:12 | Dorian Deng      
Enterprise Library 的数据访问应用程序块其实一般都够用了。
《Enterprise Library 中文文档》http://wiki.entlib.net.cn" target="_new">http://wiki.entlib.net.cn

  回复  引用  查看    
2008-04-25 19:29 | 西南药业[未注册用户]
我用SqlHelper
复杂的用 Microsoft.Practices.EnterpriseLibrary.Data;

  回复  引用    
2008-04-25 21:04 | zhuanming[未注册用户]
1.1 没什么不好
  回复  引用    
2008-04-26 01:48 | 狼Robot      
1.1也没什么不好的.做好了就好.
  回复  引用  查看    
2008-04-26 09:48 | 程序员相轻      
http://www.cnblogs.com/Emoticons/yoyocici/223852199.gif" alt="" />
  回复  引用  查看    
#9楼[楼主]
2008-04-26 09:59 | henry      
从稳定性和代码安全性上1.1和2.0是不能比的。
虽然程序本质没有变,但在语言特性和IDE的支持效率和质量都相对好把握很多(总得来说减轻开发人的工作量,更多的时间去思考问题)。

  回复  引用  查看    
2008-04-26 13:34 | niuniu[未注册用户]
还不如 ADOKeycap 呢
  回复  引用    
#11楼[楼主]
2008-04-26 14:44 | henry      
@niuniu
你很会开玩笑:)

  回复  引用  查看    
2008-04-26 18:11 | 阿森纳      
继续学习C#基础知识
  回复  引用  查看    
2008-04-27 20:32 | 镜涛      
--引用--------------------------------------------------
狼Robot: 1.1也没什么不好的.做好了就好.
--------------------------------------------------------

  回复  引用  查看    
2008-04-28 10:56 | Peter Li      
什么时代?
  回复  引用  查看    
2008-05-01 02:02 | wtw[未注册用户]
最不想看的就是大段大段没注释的代码
  回复  引用    



发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 1171382




相关文章:

相关链接:
<2008年4月>
303112345
6789101112
13141516171819
20212223242526
27282930123
45678910

与我联系

搜索

 

常用链接

留言簿

我参加的小组

我的标签

随笔分类

最新评论

60天内阅读排行