好多成员方法,头尾都是一样的,中间不一样,代码如下,如何优化? 谢谢
public DataSet GetDataSet(string cmdtext)
{
try
{
myConn.Open(); DataSet ds = new DataSet();
SqlCommand cmd = new SqlCommand(cmdtext);
cmd.Connection = myConn;
SqlDataAdapter da = new SqlDataAdapter(cmd);
da.Fill(ds);
return ds;
}
catch (Exception e)
{
throw (e);
}
finally
{
myConn.Close();
}
} public DataTable GetTable(string cmdtext)
{
try
{
myConn.Open(); DataTable dt = new DataTable();
SqlCommand cmd = new SqlCommand(cmdtext);
cmd.Connection = myConn;
SqlDataAdapter da = new SqlDataAdapter(cmd);
da.Fill(dt);
return dt;
}
catch (Exception e)
{
throw (e);
}
finally
{
myConn.Close();
}
} public object ExecuteScalar(string sqlstr)
{
try
{
myConn.Open(); SqlCommand cmd = new SqlCommand(sqlstr);
cmd.Connection = myConn;
return cmd.ExecuteScalar();
}
catch (Exception e)
{
throw (e);
}
finally
{
myConn.Close();
}
} public int Execute(string sqlstr)
{
try
{
myConn.Open(); SqlCommand cmd = new SqlCommand(sqlstr);
cmd.Connection = myConn;
return cmd.ExecuteNonQuery();
}
catch (Exception e)
{
throw (e);
}
finally
{
myConn.Close();
}
} public object ExecuteReturnID(string sqlstr)
{
try
{
myConn.Open(); SqlCommand cmd = new SqlCommand(sqlstr);
cmd.Connection = myConn;
cmd.ExecuteNonQuery();
cmd.CommandText = "SELECT @@IDENTITY";
return cmd.ExecuteScalar();
}
catch (Exception e)
{
throw (e);
}
finally
{
myConn.Close();
}
}

解决方案 »

  1.   

     myConn.Open();                DataSet ds = new DataSet();
                    SqlCommand cmd = new SqlCommand(cmdtext);
                    cmd.Connection = myConn;
                    SqlDataAdapter da = new SqlDataAdapter(cmd);
                    da.Fill(ds);
                    return ds;
    起码应该把对象的申请 DataSet ds = new DataSet(); 放在 myConn.Open() 前面
      

  2.   

    不好意思啊,没用过,xxxHelper是什么? 请教了。
      

  3.   

    看个开头就没法看了,
    你这个东西只能访问一个数据库么?
    最起码应该把连接字符串作为参数吧,比如:
    public static DataTable Execute(string pConnStr, string pSqlString)封装App对象或者DataBase对象,隔离细节
    调用的时候:
    DAHelper.Execute(...App.ConnStr,.....)
      

  4.   

    不好意思啊,没用过,xxxHelper是什么? 请教了。
      

  5.   

    SQLServerHelper.cs
    AccessHelper.cs
    OleDbHelper.cs
    MySqlHelper.cs
    等等
      

  6.   

    你这写在页面只能在这个页面调用,无从谈及优化,若是多个页面也需要调用这些方法才可称的上优化,前提是要将这方法封装到一个类里面就行了。
    当然楼主并不是这意思,我觉得应该没什么好方法优化吧,可能我能力还没到吧,
    因为你这里有DataSet ,DataTable 然后又是ExecuteScalar,ExecuteNonQuery都不同关键也在这里,没什么好办法,还是就这样了。 
      

  7.   

    可以提取变化部分做成lambda public DataSet GetDataSet(string cmdtext)
    {
    return DoCommand(cmdtext, cmd =>
    {
    DataSet ds = new DataSet();
    SqlDataAdapter da = new SqlDataAdapter(cmd);
    da.Fill(ds);
    return ds;
    });
    } public DataTable GetTable (string cmdtext)
    {
    return DoCommand(cmdtext, cmd =>
    {
    DataTable dt = new DataTable();
    SqlDataAdapter da = new SqlDataAdapter(cmd);
    da.Fill(dt);
    return dt;
    });
    } public object ExecuteScalar (string sqlstr)
    {
    return DoCommand(sqlstr, cmd => cmd.ExecuteScalar());
    } public int Execute(string sqlstr)
    {
    return DoCommand(sqlstr, cmd => cmd.ExecuteNonQuery());
    } public object ExecuteReturnID(string sqlstr)
    {
    return DoCommand(sqlstr, cmd =>
    {
    cmd.ExecuteNonQuery();
    cmd.CommandText = "SELECT @@IDENTITY";
    return cmd.ExecuteScalar();
    });
    } public T DoCommand<T>(string cmdtext, Func<SqlCommand, T> func)
    {
    try
    {
    myConn.Open();
    SqlCommand cmd = new SqlCommand(cmdtext);
    cmd.Connection = myConn;
    return func(cmd);
    }
    catch (Exception e)
    {
    throw (e);
    }
    finally
    {
    myConn.Close();
    } }
      

  8.   

    楼上改写得很好。但是楼主的代码有根本性错误,涉及到SqlDataAdapter的代码都不需要自己写数据库打开、关闭。