闲来无事,从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的类型进行判断,看是否选用什么。