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

上記のコードでは、SQLステートメントを使用しています。それ以外の場合は使用しますStored Procedures

4

2 に答える 2

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();
}
于 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 に答える