请大家给点建议.
/// <summary>
/// 以下:DataBaseDB类
/// 作用:本想封装一个SQL类,但是之前的代码又不想抹掉,于是还保留DataBaseDB类.
/// </summary>
public class DataBaseDB   {
//定义连接字符串
public static string ConnectionString=ConfigurationSettings.AppSettings["SQLCONNECTIONSTRING"];
} /// <summary>
/// 以下:DB类
/// 作用:封装一个SQL类,比如查询,返回DataSet or DataReader
/// sample: db d=new db(); db.s="select..";  db.retdr();
/// sample:  db.s="...";    db.retrs("表名");
/// sample:  db.s="...";    db.retnon();
/// </summary>
public class db
{
/* private */string s;
SqlConnection conn;
SqlCommand cmd;
/*  SqlDataAdapter da; */ 
DataSet ds;
SqlDataReader dr; 
//ctor
public db()
{ s="";
ds=null;
dr=null;
conn=new SqlConnection(DataBaseDB.ConnectionString );
cmd=new SqlCommand ();
cmd.Connection=conn;
/* da=new SqlDataAdapter (conn); 
dr=new SqlDataReader ();
ds=new DataSet ();         */

}

//dtor "~db()" 会出错。所以改名为close()
  ~db()
{
if(conn.State.ToString ()=="Open")conn.Close();
if(dr!=null || !dr.IsClosed)dr.Close ();
if(ds!=null)ds.Clear();
        } /*设置Sql string,这样做有个好处就是免被注入SQL
public void setsqlstring(string str){
s=str;
}*/ //返回SQLDataReader
public void retdr()
{
cmd.CommandText =s;
conn.Open ();
dr=cmd.ExecuteReader (CommandBehavior.CloseConnection );
conn.Close ();
}
//没有返回
public void retnon()
{
cmd.CommandText =s;
conn.Open ();
cmd.ExecuteNonQuery();
conn.Close ();
}
//返回dataset
public void retds(string TableName)
{
cmd.CommandText =s;
ds=new DataSet ();
SqlDataAdapter da=new SqlDataAdapter (cmd);
da.Fill (ds,TableName);

}
//其他处理,暂时想不出来。 }

解决方案 »

  1.   

    设置Sql string,这样做有个好处就是免被注入SQL
    -------------
    使用参数的Comand可以避免SQL注册.
      

  2.   

    楼上的老大,这样的功能可能有些简单,其实你可以做一个中间件,从而将要开发的项目分成3层,那样用中间件来对数据库进行操作,不是更好,而且你这个东西我觉得根本不合乎软件是的“开--闭”原则,一旦进行改变,那么你的类就只能去除从来,比如说我们将链接改成了oracle或access你的类就只能修改,而不能扩展了!呵呵,我觉得这个东西还是使用一个抽像工厂模式要合理得多!
      

  3.   

    http://www.microsoft.com/china/msdn/archives/library/dnbda/html/daab-rm.asp#daab-rm_downloadingandinstallingthedaabL里面有Sqlhelper代码.
      

  4.   

    这涉及到软件架构方面的东西,希望多看看设计模式方面的书,你那样的做法是把Sql操作和业务逻辑层直接混为一谈了,从设计模式来说,不合理。
      

  5.   

    不要直接在释构函数中调用关闭,这个有可能产生问题可以看下MSDN释构函数的描述。
    方法直接返回操作值,在操作性上会方便很多。
    参数上不灵活,同是执行多个操作麻烦(可以参SQLHELPER,早期的版设计是无状态,所以参数多使用也麻烦,现在的版本不清楚)
    最好提借参数化语句执行,可以防止SQL注入。
    楼主有一个最重要的地方没有考虑,在多操作的情况如何如果事务保证,如果项目使用了你的类后期才必现事务这问题那你会很头痛。(不过也可以通过COM+包装来减少修改)
    以上只是个人看法。
      

  6.   

    cmd.CommandText =s;
    conn.Open ();
    dr=cmd.ExecuteReader (CommandBehavior.CloseConnection );
    conn.Close ();
    ----
    楼主自己看下代码有没有问题
      

  7.   

    建议你看一下Petshop3.0的 封装类