[方法分析]从SQL中读取数据并放入DataSet中

闲来无事,从c-sharpcorner看到了一篇文章,摘出其中一个方法在这里与大家分析一下。

这是一个很正规的方法,但却是很有意义,你可以通过这个方法去做一些重载,形成自己的方法。这个方法中可借鉴的就是下面的这个思路。
我们在做一些自己的数据访问中间件时,有时候会遇到一些问题,如,如何去做一个数据访问类,中间存在着几个方法,通过传递一些参数,可以完成我们很多的数据操作,并返回我们所需要的结果。尽可能的以OOP的思想去达到代码的可重用性。下面这个例子就体现了一个很好的思路,通过两个字符数组,将查询语句和表名带入,从而得到一个DataSet集。

方法说明如下:
            public DataSet GetDataSet
                        (string strConnect,string[] ProcName , string[] DataTable)
            {
                        //*********************************************************************
                        //* 目的:根据条件返回一个Dataset,其中包括一到多个datatables
                        //* 参数:                        
                        //* strConnect----数据库链接字符串
                        //* ProcName() ---存储过程名的集合,其实可以根据自己的需求进行扩展,这里完全可以这成一般的检索字符串
                        //* DataTable()---DataTable名称
                        //* 返回: 
                        //* DataSet
                        //* *******************************************************************                                     DataSet dstEorder ;
                        SqlConnection conn;
                        SqlDataAdapter dadEorder; 
                        try
                        {
                                    //获取数组的维数
                                    int intCnt = ProcName.GetUpperBound(0);
                                    dstEorder = new DataSet();
                                    conn = new SqlConnection(strConnect);
                                    //发科技司数组的维数为1,也就是说,只有一个检索字符串,并有一个表名
                                    if(intCnt == 0)
                                    {
                                                dadEorder = new SqlDataAdapter(ProcName[0], conn);
                                                dadEorder.Fill(dstEorder, DataTable[0]);
                                    }
                                    //多个检索
                                    else
                                    {
                                                conn.Open();
                                                //先加入第一个结果到DataSet中
                                                dadEorder = new SqlDataAdapter(ProcName[0], conn);                                         
                                                dadEorder.Fill(dstEorder, DataTable[0]);
                                                //加入其它的(注:你可以将这步和上一步进行合并,其实也是一样的)
                                                for(int i=1 ;i< (intCnt +1) ;i++)
                                                {
                                                dadEorder.SelectCommand = new SqlCommand(ProcName[i], conn);
                                                dadEorder.Fill(dstEorder, DataTable[i]);
                                                }                                  
                                                conn.Close();
                                                }
                                                return dstEorder;
                                    }
                                    catch ( Exception objError)
                                    {
                                               //将错误写入到WINDOWS日志中                 
                                                WriteToEventLog(objError);
                                                throw;                                       
                                    }
            }

使用方法例子:

            System.Data.DataView dvwProduct= new System.Data.DataView() ;
            System.Data.DataView dvwSearch= new System.Data.DataView() ;
            System.Data.DataSet dst ;
            string[] arrProcName = new string[2];
            string[] arrTableName = new string[2];    
            //如果使用存储过程,使用下面的                        
            arrProcName[0] = ""SP_Search  '" + FirstName + " '";
            arrProcName[1] = "sp_getProduct "+ prodID;
            //如果使用一般检索语句,使用下面                        
            arrProcName[0] = "select * from my where id>20 and id <200";
            arrProcName[1] = "select * form Products";
            //设置检索结果存放的表名
            arrTableName[0] = "Search";
            arrTableName[1] = "Products";
            string strConnect = "Data Source=ServerName;InitialCatalog=databaseName;
            UID=yourUserid; PWD=yourPassword"
            //调用方法进行绑定,别忘了使用前根据情况要对方法所在的类进行实例化,如果使用接口,通过接口使用些方法
            dst = objdb.GetDataSet(strConn,arrProcName,arrTableName);
            dvwSearch=dst.Tables["Search"].DefaultView;
            dvwProduct = dst.Tables["Products"].DefaultView;  

 

 

对于上面的方法,你可以扩展到访问SQL数据库之外的数据库类型。

如,你可以先作一个枚举,如:

enum DataType
{
   SQL Server,
   Access,
}

然后可以将上面的方法扩展为:
public DataSet GetDataSet 
                        (DataType datatype,string strConnect,string[] ProcName , string[] DataTable)

在方法中,你可以根据datatype的类型进行判断,看是否选用什么。 


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值