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

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

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

No.97623 の関連記事表示

<< 0 >>
■97623  同時に取得する方法
□投稿者/ 白音 -(2021/06/15(Tue) 16:57:23)

    分類:[データベース全般] 

    VisualStudio からデータソースを介して
    SQLServer に以下の6つを同時にとってくることは
    できるのでしょうか?
    SQLServerManagementStudio では同時に書いて実行すると
    同時に返ってきます。

    Getを使ってもFillを使っても以下の6つを
    同時取得する方法がわかりません。


    SELECT *
    FROM TBLA
    WHERE CODE = @OBCODE

    SELECT *
    FROM TBLA
    WHERE CODE = @NPCODE

    SELECT *
    FROM TBLB
    WHERE PCODE = @NPCODE

    SELECT *
    FROM TBLA
    WHERE CODE = @NCCODE

    SELECT *
    FROM TBLC
    WHERE CODE = @NCCODE

    SELECT *
    FROM TBLB
    WHERE PCODE = @NPCODE
    OR CCODE = @NCCODE
親記事 /過去ログ169より / 関連記事表示
削除チェック/

■97624  Re[1]: 同時に取得する方法
□投稿者/ 魔界の仮面弁士 -(2021/06/15(Tue) 17:17:20)
    No97623 (白音 さん) に返信
    > VisualStudio からデータソースを介して
    > SQLServer に以下の6つを同時にとってくることは
    > できるのでしょうか?

    バッチクエリというやつですね。

    ADO.NET の SqlDataAdapter なら .Fill メソッドに DataSet を渡せば、
    DataSet 内の別々の DataTable に保持されます。
    https://www.atmarkit.co.jp/fdotnet/dotnettips/137multisel/multisel.html

    SqlDataReader 経由で取得している場合は、そのリーダーの
    NextResult (または NextResultAsync) メソッドを呼び出せば、
    次の結果セットが読み込まれます。

    Dapper なら、QueryMultiple メソッドを使えます。
    https://github.com/DapperLib/Dapper
記事No.97623 のレス /過去ログ169より / 関連記事表示
削除チェック/

■97625  Re[2]: 同時に取得する方法
□投稿者/ 白音 -(2021/06/16(Wed) 09:07:00)
    2021/06/16(Wed) 09:19:23 編集(投稿者)

    No97624 (魔界の仮面弁士 さん) に返信
    ありがとうございます。

    データソースにTABLEを追加して TABLE.xsd を作成し、表示すると
    それぞれのテーブルの箱があり、
    それぞれのTBL?(TBLA, TBLB, TBLC, TBLD・・・)の列が表示されていて、
    その下に TBL?TableAdapter が表示されています。

    TBLA の TableAdapter に追加クエリで
    FillAll(@OBCODE, @NPCODE, @NCCODE)
    を作成してC#からの呼び出し元を以下のような関数にしています。


    static adpt = new dsTABLETableAdapters.TBLATableAdapter();

    public static DataSet FillAll(string OLDBCODE, string NEWZCODE, string NEWBCODE)
    {
     dsTABLE ds = new dsSIMS2_MASTER();
     ds.EnforceConstraints = false;
     adpt.FillAll(ds.TBLA, OLDBCODE, NEWZCODE, NEWBCODE);
     return (ds.TBLA);
    }

    として使用したのですが、最初の1つ目の結果しか返ってきませんでした。。

    呼び出しを
    adpt.FillAll(ds, OLDBCODE, NEWZCODE, NEWBCODE);
    に変えてみたのですが、ds は引数として受け付けませんでした。
    何がいけないのでしょうか?
記事No.97623 のレス /過去ログ169より / 関連記事表示
削除チェック/

■97626  Re[3]: 同時に取得する方法
□投稿者/ WebSurfer -(2021/06/16(Wed) 09:34:40)
    No97625 (白音 さん) に返信

    > データソースにTABLEを追加して TABLE.xsd を作成し、表示すると
    > それぞれのテーブルの箱があり、
    > それぞれのTBL?(TBLA, TBLB, TBLC, TBLD・・・)の列が表示されていて、
    > その下に TBL?TableAdapter が表示されています。

    Visual Studio のデータソース構成ウィザードを使って型付 DataSet / DataTable + TableAdapter を
    作成したようですね。であれば、そういう話は最初の質問の一行目に書いてください。そうしないと話
    が噛み合わなくて、質問者さん、閲覧者、回答者の時間と労力の無駄になります。

    それを作った後、以下の記事の「D. テーブルアダプタへのクエリ追加」セクションにあるようにして、
    WHERE 句で条件付き抽出ができるようにしてますか?

    7.6 データコンポーネント機能によるデータアクセスコンポーネントの開発
    https://www.atmarkit.co.jp/fdotnet/bookpreview/vs2005webapp_07/vs2005webapp_07_03.html

    上の記事の例では、FillByState, GetDataByStata(@state) がそれです。


記事No.97623 のレス /過去ログ169より / 関連記事表示
削除チェック/

■97627  Re[4]: 同時に取得する方法
□投稿者/ 還暦 -(2021/06/16(Wed) 10:34:04)
    2021/06/16(Wed) 10:45:37 編集(投稿者)

    6つ作ってそれぞれを作って呼び出すしかないのでは?

    SELECT *
    FROM TBLA
    WHERE CODE = @OBCODE

    SELECT *
    FROM TBLA
    WHERE CODE = @NPCODE

    SELECT *
    FROM TBLB
    WHERE PCODE = @NPCODE

    SELECT *
    FROM TBLA
    WHERE CODE = @NCCODE

    SELECT *
    FROM TBLC
    WHERE CODE = @NCCODE

    SELECT *
    FROM TBLB
    WHERE PCODE = @NPCODE
    OR CCODE = @NCCODE
記事No.97623 のレス /過去ログ169より / 関連記事表示
削除チェック/

■97630  Re[3]: 同時に取得する方法
□投稿者/ 魔界の仮面弁士 -(2021/06/16(Wed) 14:05:05)
    No97625 (白音 さん) に返信
    > その下に TBL?TableAdapter が表示されています。

    TableAdapter の場合は、複数の DataTable の取得が行えません。
    DataAdapter を No97624 のリンク先のように呼び出してください。

    もしくは、バッチクエリにせず、SQL を分けて、個別に Fill するようにします。
記事No.97623 のレス /過去ログ169より / 関連記事表示
削除チェック/

■97671  Re[4]: 同時に取得する方法
□投稿者/ 白音 -(2021/06/24(Thu) 16:19:20)
    No97630 (魔界の仮面弁士 さん) に返信

    ありがとうございました。
    複数のデータをとることができました。

    そこで。。。なのですが

    ウィザードを使用して以下のスカラー形式でデータを
    とってくる方法を使っていますが、
    今回と同様に以下の文字列を送信して
    dataをとってくる方法ってあるのでしょうか?

    string data;
    da.Fill(data);
    はダメでした。


    SELECT DATA
    FROM TBLA
    WHERE CODE = @OBCODE

    やはり、以下のように一度 DataTable dt で取得して
    data を取得するのでしょうか?

    string connstr = Properties.Settings.Default.ConnectionString;
    SqlDataAdapter da = new SqlDataAdapter(
    "SELECT DATA" +
    "FROM TBLA" +
    "WHERE CODE = @OBCODE", connstr);
    DataSet ds = new DataSet();
    ds.EnforceConstraints = false;
    DataTable dt = new DataTable();
    ds.Tables.Add(dt);
    da.Fill(dt);

    string data = (dt.Rows.Count <= 0) ? "": dt.Rows[0]["DATA"].ToString();
記事No.97623 のレス /過去ログ169より / 関連記事表示
削除チェック/

■97673  Re[5]: 同時に取得する方法
□投稿者/ 魔界の仮面弁士 -(2021/06/24(Thu) 18:17:37)
記事No.97623 のレス /過去ログ169より / 関連記事表示
削除チェック/

■97677  Re[6]: 同時に取得する方法
□投稿者/ 白音 -(2021/06/25(Fri) 16:05:44)
    No97673 (魔界の仮面弁士 さん) に返信

    これでいいのでしょうか?

      private static object Scalar(string selectStr)
      {
       object obj = null;
       string connstr = Properties.Settings.Default.ConnectionString;
       using (var connection = new SqlConnection(connstr))
       {
        using (SqlCommand command = new SqlCommand(selectStr, connection))
        {
         obj = command.ExecuteScalar();     
        }
        connection.Close();
       }
       return (obj);
      }
記事No.97623 のレス /過去ログ169より / 関連記事表示
削除チェック/

■97680  Re[7]: 同時に取得する方法
□投稿者/ 魔界の仮面弁士 -(2021/06/25(Fri) 19:30:13)
    No97677 (白音 さん) に返信
    > これでいいのでしょうか?

    はい、それでよいと思います。

    もし、object 型だとキャストが面倒だというのであれば、
    代わりに dynamic 型で受けてみるのも良いかと思います。

    最初から型を明示して受け取りたい場合は、先に紹介した Dapper を使うのが便利です。
記事No.97623 のレス /過去ログ169より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -