DOBON.NET DOBON.NETプログラミング掲示板過去ログ

SQLコネクションについて

環境/言語:[/XP/C#/SQLサーバ]
分類:[.NET]

お世話になっております。

教えて頂きたいことがあります。

現在、検索処理を作成中で、
VisualC#からSQLサーバのデータを取得するために

///ソース抜粋 Start
system.Data.SqlClient.SqlCommand commandOtherFields = new System.Data.SqlClient.SqlCommand(sb.ToString(), conn);
System.Data.SqlClient.SqlDataReader readerOtherFields = commandOtherFields.ExecuteReader();

while(readerOtherFields.Read())
{
al.Add (readerOtherFields.GetString(0)) ;
}

readerOtherFields.Close();
commandOtherFields.Dispose();

///ソース抜粋 End

と、このような感じでデータを取得しにいっているのですが、
ExecuteReaderが行われている段階(つまり途中で)
で、検索をキャンセルしたい場合は
このSQLConnection自体を切断してかまわないのでしょうか?
それともExecuteReaderのように同期ではなく非同期に
データを読むやり方があるのでしょうか?

説明がうまくないのでわかりにくいかもしれませんが
よろしくお願いいたします。
スグルさんこんにちは。

きいぼーです。

検索をキャンセルしたい場合とは、
> while(readerOtherFields.Read())
> {
> al.Add (readerOtherFields.GetString(0)) ;
> }
の間でと言うことでしょうか?
であれば、
readerOtherFields.Close();
を中断時に行えばいいと思います。

> それともExecuteReaderのように同期ではなく非同期に
> データを読むやり方があるのでしょうか?
SqlDataReader を 使ったのが、SqlConnectionが使用されるので
同期ということであれば、
DataAdapter/DataSet/DataTable
を利用し、データを読み込む方法もあります。
この際。SqlConnectionは、DataAdapterをFill
するときだけ使用されますので、非同期と言うことになると思います。
きいぼーさんありがとうございます。

> 検索をキャンセルしたい場合とは、
>>while(readerOtherFields.Read())
>>{
>> al.Add (readerOtherFields.GetString(0)) ;
>>}
> の間でと言うことでしょうか?
> であれば、
> readerOtherFields.Close();
> を中断時に行えばいいと思います。

Whileではなく、ExecuteReaderのところでデータを取得しますので
SqlCommandのExecuteReaderがはしっている時にキャンセルを
する方法が知りたいです。
きいぼーです。

スグルさんへ、
> Whileではなく、ExecuteReaderのところでデータを取得しますので
> SqlCommandのExecuteReaderがはしっている時にキャンセルを
> する方法が知りたいです。

ExecuteReaderではデータは取得しているのではなく、
読み込む為のReaderを作成しているだけで、
> >>while(readerOtherFields.Read())
> >>{
> >> al.Add (readerOtherFields.GetString(0)) ;
> >>}
でデータは取得していると思いますが。。

ExecuteReaderで実行が何秒もかかるのでしょうか?
Debugでどこに時間がかかっているのか見られたら如何でしょう?

DOBON.NET | プログラミング道 | プログラミング掲示板