使用带有或不带With()for Dispose的数据集时,哪个是更优化的代码

时间:2012-12-18 05:32:31

标签: c# asp.net dataset webforms

到目前为止,我使用了Dataset作为我的网站使用了很多Dataset

    string strSql = "SELECT * FROM Articles";
    DataSet ds = new DataSet();
    ds = DataProvider.Connect_Select(strSql);
    string Title = ds.Tables[0].Rows[0]["Article_Title"].ToString();
    string Desc = ds.Tables[0].Rows[0]["Article_Desc"].ToString();

代码Using阻止

string strSql = "SELECT * FROM Articles";
    // Create a DataSet in using statement.
using (DataSet ds = new DataSet())
{
    ds = DataProvider.Connect_Select(strSql);
    string Title = ds.Tables[0].Rows[0]["Article_Title"].ToString();
    string Desc = ds.Tables[0].Rows[0]["Article_Desc"].ToString();
}

使用DataSet

的最佳方法和优化方法是什么?

上面的代码我正在使用SQL声明,否则我使用Stored Procedures

2 个答案:

答案 0 :(得分:2)

using仅确保在DataSet上调用Dispose方法,即使发生异常也是如此。不确定它的优化程度,但对于实现IDisposable接口的对象来说,这是一种更安全的方法和更好的实践。 using语句就像try / finally块。

就像:

DataSet ds;
try
{
ds = new DataSet();
ds = DataProvider.Connect_Select(strSql);
string Title = ds.Tables[0].Rows[0]["Article_Title"].ToString();
string Desc = ds.Tables[0].Rows[0]["Article_Desc"].ToString();
}
finally 
{
if(ds != null)
     ds.Dispose();
}

答案 1 :(得分:1)

我建议你使用短小精悍。 DataSet效率很低。 从Nuget或dapper.org下载Dapper

创建DTO(数据传输对象)

public class ArticleDto
{
    public int ArticleID {get; set;}
    public string Title {get; set;}
    public string Description {get; set;}
}

然后在数据层中创建一个管理数据库连接的基类

public abstract class SalesDb : IDisposable
{
    protected static IDbConnection OpenConnection()
    {
        IDbConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["NAME"].ConnectionString);
        connection.Open();
        return connection;
    }
}

然后,创建从数据库返回数据的服务类

public class ArticleService : SalesDb
{
    public IEnumerable<ArticleDto> SelectAll()
    {
        using (IDbConnection connection = OpenConnection())
        {
            var articles = connection.Query<ArticleDto>("SELECT * FROM Articles");

            return articles;
        }
    }
}