C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.83438 の関連記事表示

<< 0 >>
■83438  非同期のDBアクセスの記述方法
□投稿者/ ぼよん -(2017/03/23(Thu) 17:00:02)

    分類:[C#] 

    VS2016のC#を使ってDBアクセスのサンプルを作っています。
    実は・・・私はほとんどC#を書いたことがなくて、過去にVB6で作ったツールをC#の勉強しつつ作り直そうとしています。

    コードはしょりますが、使うオブジェクトは以下です。

    using IBM.Data.DB2;

    DB2Connection con;
    DB2DataReader reader = null;

    cmd = con.CreateCommand()
    cmd.CommandText = azukiScript.Text;

    同期処理なら、
    reader = cmd.ExecuteReader();
    これで、うまく操作できました。
    非同期の場合がどうやればよいのかわかりません。
    Task task = cmd.ExecuteReaderAsync();
    と、書くのでしょうか???
    その場合、後続はどう書くべきなんでしょうか?

    ExecuteReaderAsync で検索しても、使用例がまったくHitしないためさっぱりです。

    どなたかよきアドバイスをお願いします。
親記事 /過去ログ143より / 関連記事表示
削除チェック/

■83535  Re[1]: 非同期のDBアクセスの記述方法
□投稿者/ shu -(2017/03/27(Mon) 13:49:37)
    No83438 (ぼよん さん) に返信

    > 非同期の場合がどうやればよいのかわかりません。
    > Task task = cmd.ExecuteReaderAsync();
    > と、書くのでしょうか???
    > その場合、後続はどう書くべきなんでしょうか?
    ExecuteReaderAsyncは使ったことがないですが
    これはTask型のインスタンスが作成されているだけなので
    多分実行はされていないのではないでしょうか?
    Startで実行して
    ContinueWithで継続処理を続けていくと思われます。

    別スレッドを作成してその中でExecuteReaderを
    行ったほうがよいかもしれません。
記事No.83438 のレス /過去ログ143より / 関連記事表示
削除チェック/

■83555  Re[2]: 非同期のDBアクセスの記述方法
□投稿者/ もりお -(2017/03/27(Mon) 23:02:12)
    No83535 (shu さん) に返信

    ExecuteReaderAsyncは内部でTaskFactory.FromAsyncを呼び出していて
    ↓こんなの見つけました

    https://msdn.microsoft.com/ja-jp/library/dd997423(v=vs.110).aspx
    | FromAsync タスクの開始とキャンセル
    |
    | FromAsync メソッドから返されるタスクの状態は WaitingForActivation で、
    | タスク作成後のある時点でシステムによって開始されます。
    | このようなタスクで Start を呼び出そうとすると、例外が発生します。

    実行は自動的にされるみたいです。
記事No.83438 のレス /過去ログ143より / 関連記事表示
削除チェック/

■83563  Re[3]: 非同期のDBアクセスの記述方法
□投稿者/ ぼよん -(2017/03/28(Tue) 11:14:41)
    おふた方、ありがとうございます。

    少し調べてみましたが、前提スキルが低すぎて理解がおよびません。
    「非同期」を私が取り違えてるのでしょうか。
    ほにゃららAsync のメソッドがいくつか用意されているもののこれらは何が違うのでしょうか。

    VB6+RDO で作ってたツールを非同期で組んでたので、そのままC#で作り直そうとしています。
    SQLの実行結果は RDOのコネクションオブジェクトからイベントハンドラーで通知されるような仕組みでした。
    なんとなく task や async などかなあと 調べつつ進めるも、サンプルがなさすぎます。
    世間一般ではやらないのでしょうかね???

    独学ははじめの一歩が一番しんどいですね。
    ハードル高いなぁ・・・と感じてます。
記事No.83438 のレス /過去ログ143より / 関連記事表示
削除チェック/

■83567  Re[4]: 非同期のDBアクセスの記述方法
□投稿者/ なちゃ -(2017/03/28(Tue) 13:28:17)
    Taskを利用する非同期処理そのままなので 、Taskの例や使い方を見るのが早いです。
    戻り値有りのTaskの使い方と同じです。
    awaitとかと組み合わせて使ったりします。
記事No.83438 のレス /過去ログ143より / 関連記事表示
削除チェック/

■83570  Re[5]: 非同期のDBアクセスの記述方法
□投稿者/ ぼよん -(2017/03/28(Tue) 14:51:11)
    No83567 (なちゃ さん) に返信
    > Taskを利用する非同期処理そのままなので 、Taskの例や使い方を見るのが早いです。

    そうします!
    ここに良さそうな情報がありましたので試してみますね。
    http://www.kekyo.net/2016/12/06/6186
記事No.83438 のレス /過去ログ143より / 関連記事表示
削除チェック/

■83591  Re[6]: 非同期のDBアクセスの記述方法
□投稿者/ 渋木宏明 -(2017/03/29(Wed) 22:34:11)
    async/await 構文を使うのが推奨です。
記事No.83438 のレス /過去ログ143より / 関連記事表示
削除チェック/

■83632  Re[7]: 非同期のDBアクセスの記述方法
□投稿者/ ぼよん -(2017/03/31(Fri) 11:59:06)
    その後、いくつかのサイトを参考にTASKを勉強してました。
    ここを見ながら async/await をためしました。
    http://www.atmarkit.co.jp/ait/subtop/features/dotnet/app/masterasync_index.html

    reader = DBCommand.ExecuteReader は動作したのですが、その結果をDataGridやStripなどのUIに展開するときに
    「コントロールが作成されたスレッド以外のスレッドからコントロール xxxxx がアクセスされました。」
    のエラーが出てこけます。

    UIスレッド以外で、コントロールに触れてはいけないみたいですね。
    ※正直なところスレッドの意味もよくわかっていませんでした。プロセスの1階層下でCPUが割り振られるぐらいに考えてます。
    じゃあ、どうするのと調べてたら、Invokeやdelegateなどのキーワードが出てきます。
    このあたりはまだ意味がよく判っていません。

    やりたいことはDBへのSELECTした結果をGRIDに展開するまで、UIを止めず、途中でキャンセルができるようにしたいのです。
    基本的な考え方というか、作り方が間違ってるんじゃないかなとも思ったりしています。

    ご意見いただけないでしょうか。
記事No.83438 のレス /過去ログ143より / 関連記事表示
削除チェック/

■83633  Re[8]: 非同期のDBアクセスの記述方法
□投稿者/ shu -(2017/03/31(Fri) 12:24:31)
    No83632 (ぼよん さん) に返信

    > やりたいことはDBへのSELECTした結果をGRIDに展開するまで、UIを止めず、途中でキャンセルができるようにしたいのです。
    > 基本的な考え方というか、作り方が間違ってるんじゃないかなとも思ったりしています。
    >
    BackgroundWorkerを使って
    DoWorkで読み取りを行い
    RunWorkerCompletedでUIへの設定を行うのがよいかと思います。

    BackgroundWorkerのMSDNの例
    https://msdn.microsoft.com/ja-jp/library/cc221403(v=vs.95).aspx?cs-save-lang=1&cs-lang=vb#code-snippet-3
記事No.83438 のレス /過去ログ143より / 関連記事表示
削除チェック/

■83635  Re[9]: 非同期のDBアクセスの記述方法
□投稿者/ ぼよん -(2017/03/31(Fri) 13:50:24)
    ありがとうございます。BackgroundWorkerですか。いろいろあるもんですね。

    Query待ちのキャンセル方法を調べていませんが、
    BackgroundWorkerの中で処理すればQuery待ちでも、結果の描画でも、
    ひとつのCancelAsyncで止めれるのかなと思いました。
    そうなると、DBのほにゃららAsyncメソッドの出番がまったくないんですがどう使い分けるんでしょうね。
    とにかく、試してみたいと思います。
記事No.83438 のレス /過去ログ143より / 関連記事表示
削除チェック/

■83639  Re[10]: 非同期のDBアクセスの記述方法
□投稿者/ なちゃ -(2017/03/31(Fri) 15:57:24)
    〜Asyncが提供されている場合は基本的にそれが一番効率がいいですしasync/awaitと組み合わせたら簡単に使えます。

    var reader = await cmmand.ExecuteReaderAsync();

    // ここからreader使った処理

    ってやるだけです基本的には。
記事No.83438 のレス /過去ログ143より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -