詳しくはasp.Netにおけるdatareaderとdatasetの違い

2611 ワード

1.データの取得方法
DataReaderはオンライン操作データであり、DataReaderは常にSqlConnection接続を占有し、データ取得中に他の操作ではSqlConnection接続オブジェクトを使用できません.
 
  
while(datareader.read())
{
..............
}
dataview.datasource=datareader;
dataview.databind();

DataSetはオフライン操作データで、DataSetはデータを一度にメモリに読み込み、接続を解除します.この場合、他の操作でSqlConnectionを使用してオブジェクトを接続できます.
バックグラウンドコード
 
  
public string test = "";
    protected void Page_Load(object sender, EventArgs e)
    {
        DataSet ds=new DataSet();// ,
        test = "";
        for (int i = 0; i < ds.Tables[0].Rows; i++)
        {
            test+=""
        }
        test+="
"+ds.Tables[0].Rows[i][" "].ToString()+"
";
    }

ページコード
 
  

   
   


DataReaderは一度に1行のデータしか読み込まないため、メモリの消費量が少ない.ただし、DataReaderは、前のデータを後で読み込むことは許されず、変更は許されません.
DataSetはすべてのデータを一度に読み出すため、リソースを消費しますが、柔軟性も向上します.データベース接続を切断した場合、データを任意の削除変更を行い、任意の順序でデータを読み取り、データベースに書き込むことができます.
なお、DataReaderが1行ずつ読み出すことは、データベース内のデータが変更され、新しいデータが読み出されることを意味するものではなく、データベースレベルの保護である.
2.データ取得メカニズム
DataReaderはIDbCommandを介しています.ExecuteReaderでデータを読み込みます.
DataSetはDbDataAdapterを通過する.Fillでデータを埋め込む
したがって、DataReaderはデータ取得時に接続を閉じることはできません.一方、DataSetは、DbDataAdapterがアプリケーションサーバにデータを読み込んだため、DataReaderを使用する場合は、接続を直ちに閉じることに注意してください.
3.その他の違い
DataReaderの読み取り速度がDataSetより速い
DataReaderはデータプロバイダクラスであり、DataSetは一般クラスであり、DbDataAdapterによってデータを埋め込む.
DataSetはオフライン操作データなので、トランザクションでロックを使用する場合は注意してください.DataSetはデータを埋め込むと接続が切断され、ロックも解除されます.
4.DataReaderを使用すると、実行効率が向上します.コードのパフォーマンスを向上させるには、シーケンス番号ベースの検索と、適切なGetメソッドを使用して検索の2つの方法があります.クエリの結果は、クエリ文を再度変更しない限り、通常は変更されません.したがって、カラムの場所を特定することでレコードを検索できます.この方法では、カラム名がどこにあるか分からない可能性があるという問題があります.この問題の解決策は、DataReaderオブジェクトのGetOrdinal()メソッドを呼び出すことで、カラム名を受信し、カラム番号を返すことです.例:
 
  
int id = reader.GetOrdinal("CategoryName");
while (reader.Read())
{
  Response.Write(reader.GetInt32(0).ToString() + " " + reader.GetString(1).ToString() + "
");
  reader.Close();
}

DataReaderのGetInt 32()とGetString()は、カラム番号を受信することによってカラムの値を返します.この2つが最も一般的で、他にも多くのタイプがあります.
(注意:DataReaderオブジェクトは、Close()メソッドを呼び出すとデータベースへの接続を閉じ、閉じる前に2番目の接続を再開すると、例外情報が生成されます)