日期:2014-05-19  浏览次数:20948 次

怎么做一个封装类?
就是要把一些基本用到的东西封装起来,包括连接数据库,返回int   dataset   DataReader   dataAdapter   datacommand的类型,谁详细说说,谢谢大家了!
做主要的就是连接数据库了   c#.net的,不是web程序,应该叫winform吧?

------解决方案--------------------
应该是使用工厂模式 将不同的数据库访问请求 都由该类转换成相应的数据库访问所需的对象
------解决方案--------------------
不一定非得是工厂模式 策略模式不行吗? 一样可以.

自己一个人做的话封装这么一个类意义不是很大,
因为微软的工程师对于数据库操作封装的已经够好了,
除非你自信比微软的工程师封装的还要好.
不过如果是一个开发团队共同开发的话,这么做可以减少数据库操作所出现的问题,还是值得的.

再有就是返回类型最好不要使用DataReader,DataTable,DataSet类型返回
这样的返回类型也就是在.net里才认.可以返回xml格式字符串(不是xmlDocument对象)
譬如在WebService里调用返回xml字符串的方法
用java写的代码接收都没问题
------解决方案--------------------
那就是数据库层了,简单的,把你要的方法组合在一个类中就可算封装了
------解决方案--------------------
1 做个DATABASE类,最好做成个抽象类,里面封装对数据库的公共基本操作,比如
public virtual DataSet ExecuteDataSet(string commandText),
public virtual int ExecuteNonQuery(string commandText) 等等

2 建几个特定数据库类,比如public class SqlDatabase:Database,这个类从DATABASE类继承,实现SQLSERVER特定的一些操作,类似的可以再做几个,比如OracleDatabase等。

3 然后做个DatabaseFactory类 ,这个类根据配制文件来生成特定类型的DATABASE类,
类似
public static Database CreateDatabase(DatabaseConnectInformation info)
{
ArgumentValidation.CheckForNullReference(info, "DatabaseConnectInformation ");

Database db = null;
switch(info.DataProvider)
{
case DataProviderType.SqlClient:
{
db = new SqlDatabase();
break;
}
case DataProviderType.OracleClient:
{
db = new OracleDatabase();
break;
}
case DataProviderType.OleDb:
{
db = new MsAccessDatabase();
break;
}
}

if (db != null)
db.DatabaseConnection = info;
return db;
}
}

------解决方案--------------------
using System;
using System.Data;
using System.Data.SqlClient;
namespace DBAccess
{
/// <summary>
/// Class1 的摘要说明。
/// </summary>
public class DB
{
SqlConnection conn = new SqlConnection ( "server=(local);database=pubs;uid=sa;pwd=sa ");
SqlCommand cmd = new SqlCommand ();
public DB()
{
//
// TODO: 在此处添加构造函数逻辑
//
}

/// <summary>
/// 执行存储过程,返回DataSet
/// </summary>
/// <param name= "cmd "> 存储过程参数数组 </param>
/// <param name= "proc "> 存储过程名 </param>
/// <returns> DataSet </returns>
public DataSet returnDataSet(string proc,SqlParameter[] paras)
{
this.cmd.Connection = conn;
this.cmd.CommandType = CommandType.StoredProcedure;
this.cmd.CommandText = proc;
if(paras!=null && paras.Length > 0)
{
foreach(SqlParameter p in paras)
{
cmd.Parameters.Add(p);
}
}
SqlDataAdapter da = new SqlDataAdapter ();
DataSet ds = new DataSet ();
da.Fill(ds);

return ds;
}

/// <summary>
/// 执行sql语句
/// </summary>
/// <param name= "sql "> sql查询语句 </param>
/// <returns> </returns>
public DataSet returnDataSet(string sql)
{
SqlDataAdapter da = new SqlDataAdapter(sql,conn);
DataSet ds = new DataSet ();
da.Fill(ds);

return ds;