1

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

以上代码我使用的是SQLStatment,否则我使用Stored Procedures

4

2 回答 2

2

using only 确保调用 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();
}
于 2012-12-18T05:34:15.937 回答
1

我建议你使用 dapper。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;
        }
    }
}
于 2012-12-22T08:47:05.740 回答