• 締切済み

SELECT文の結果を変数に・・・

C#でOracleデータベースへ接続して データーベースにある全てのテーブル名を取得したいのですが、取得した一覧を変数にする方法が分かりません。 SQL文「SELECT * FROM TAB」で一覧を取得することはわかったのですが、この結果を変数に格納することができません。 何か方法をご存知のかたが居られましたらご教授願えないでしょうか?

  • INDES
  • お礼率37% (10/27)
  • Oracle
  • 回答数1
  • ありがとう数0

みんなの回答

  • nora1962
  • ベストアンサー率60% (431/717)
回答No.1

今、手元にC#、Oracleの環境がないので、vb.net、MYSQL/ODBCになってしまいますが。 Imports System.Data.Odbc Imports System.Collections.Generic Class MyOLER Public Shared Sub Main() Dim connectionString As String Dim queryString As String connectionString = "dsn=MYSQL;user id=root;password=nara1109;database=test;" querystring = "show tables;" Using connection As New OdbcConnection(connectionString) Dim command As New OdbcCommand(queryString, connection) connection.Open() Dim reader As OdbcDataReader = command.ExecuteReader() Dim TableNames As New List(Of String()) Dim s As String() While reader.Read() s = New String(2) {} s(0) = reader(0).ToString s(1) = "" 'TableNames.add(reader(0).ToString) TableNames.add(s) End While For Each TableName As String() In TableNames Console.WriteLine(TableName(0)) Next reader.Close() End Using End Sub End Class のように、ADO.NETの「connection」オブジェクトに接続文字列設定してOpen、Oracleだったら「select owner,table_name from all_tables」をcommandに設定してクエリを実行。 2つのフィールドが帰ってくるので、それを配列(上記ならs)に代入。 で、「reader.Read()」がfalseになるまで回す。 格納数は「配列のリスト」になります。 ポイントは格納する配列はループ内でレコード単位にNewで生成することぐらいでしょうか。

関連するQ&A

  • もうちょっと賢いSELECT文が書けないものでしょうか

    初めまして、最近SQLをかじり始めたぺーぺーです。 効率の悪いSELECT文しか書けずに困っています。 下記のテーブルsoftware_tableから、 ・name列「oracle」 ・version値が最大 のレコードに含まれるid(=3)を拾ってきたいのですが、自分の頭では副問い合わせを使う方法か、ソートを使う方法しか思いつきません。 問題は副問い合わせ・ソートを使うと計算コストが大きくなってしまうことで、できることなら副問い合わせ・ソートを使わずに解決したいのですが、何か方法はないものでしょうか? よろしくお願い致します。 ----------------------------- software_table id name version 1 oracle 1 2 oracle 2 3 oracle 3 4 postgres 1 5 postgres 2 6 postgres 3 7 postgres 4 ----------------------------- ■副問い合わせを使った方法 SELECT id FROM software_table WHERE name = 'oracle' AND version = (SELECT max(version) FROM software_table WHERE name = 'oracle'); ■ソートを使った例 SELECT id FROM software_table WHERE name = 'oracle' ORDER BY version DESC LIMIT 1 OFFSET 0; -----------------------------

  • クエリビルダで列名を変数にしたいが

    VisualStudio2010でwebアプリを作成しています。 クエリビルダでSQL文を作成しSQLサーバにアクセスしています。 このSQL文でわからない点があります。 列1、列2、列3のフィールドを持つテーブルがあるとします。 ドロップダウンリストで選択した項目により、ある時は列1だけ取得し ある時は列2だけ取得し、ある時は列3だけ取得する様なSQL文を作りたいのですが、どうすればよいかわかりません、列名を変数にできればよさそうなんですが、そんなことできますか? ある時は SELECT 列1 FROM table1 ある時は SELECT 列2 FROM table1 ある時は SELECT 列3 FROM table1 としたいので   SELECT @列名 FROM table @列名は変数のつもりです。 このようにできればよいと思っていますが・・・ よろしくおねがいします

  • PLSQLで変数に格納されたSQL文の実行

    お世話になります PLSQLで変数に格納されたSQL文を実行するにはどうしたらよいでしょうか? vSql := 'select count(*) from XXX_tbl;' で vSql を実行させたいです。 ご教授ください。

  • SQLのSELECT文で*を使わない理由

    SQLでSELECT文を使う場合、大抵  SELECT ID, user FROM u_table のように、取得する項目を指定すると思います。 これを、  SELECT * FROM u_table としないのには、トラフィックの問題以外に何か理由があるのでしょうか?

  • ファイルを読み込んで変数へ

    VB初心者です。 ファイルの文字列を読み込んで、変数に格納し、SQL文のテーブル名に指定したいのですが、どうすればよいのでしょうか? テキストから文字列を取得するところまではできたのですが、変数にもって、SQL文に組み込むことができません。実行すると「テーブル名が無効です。」とエラーになります。 どうか、皆様ご教授ください。

  • 抽出結果を分割して取得

    SELECT * FROM TABLE ORDER BY A; で取得したデータが100件あったとして、 1件目から20件目だけを取得する 21件目から40件目だけを取得する みたいに、件数を指定して取得するようなSQL文は書くことができますか? データベースはOracle8iです。 よろしくお願いします。

  • php上でSQL文を実行した結果と、phpMyAdminで実行した結果が違う

    ☆実行環境 php5.3 MySQL4.0 $sql="SELECT * FROM テーブル名 WHERE フィールド名 like '".$変数."%'" php上で上記のようなSQL文を実行させようとしています。 テーブルには該当する行がいくつかあるのですが、ページ上では1行も表示してくれません。 mysql_num_rowsの返り値を見ると0になっています。 SQL文の組み立てがおかしいのかと思い、phpMyAdmin上でSQL文を実行すると、 きちんと欲しい内容が表示されます。 とするとphpでのSQL文の書き方がおかしいのだと思います。 どこかおかしいのかご教授ください。

    • ベストアンサー
    • PHP
  • 抽出した行数を変数に入れたい(オラクルSQL)

    SELECTで抽出した行数を変数に格納したいのですが、上手くいきません。 SQLにあまり経験がなく、ネットで調べながら実践しております。 例えば以下の簡単なSQLを作ったとして、 ---------------------------------------------------- SELECT a,b,c,d,e,f FROM table WHERE c=10 AND e=20; ---------------------------------------------------- ここで抽出した行数を取得し、それを変数に入れたいと思っております。 というのも、後々、抽出したデータの行数を表示したい場合に SELECT COUNT(*) FROM table WHERE c=10 AND e=20; というSQLをその都度入力していては非効率だと思ったからです。 そこで抽出する際に行数を取得し、それを変数に格納して、 行数を表示する処理が今後必要になった際に、その変数を表示すれば良いと考えました。 ですがネットで変数のことを調べた際に VARやDEFINE等のコマンドを見つけましたが、SQLを実行しても上手くいきません。 最初に記載したSQLに、どのような構文を入れたら良いのでしょうか。

  • select文の戻り値を変数に格納したい。

    select文の戻り値を変数に格納したい。 アクセスの選択クエリで以下の様なクエリをつくる。 select count(管理no) from 割り当てテーブル where 管理no = formのテキストボックスに書かれた値; doCmd.openQueryで実行させると画面が開きクエリの結果が表示される。 この値は必ず一つになるはずでその値を変数に取り込み次の処理を行いたい。 現在はクエリを実行後、フォームを開きなおし別の要素にクエリの結果を 表示させその値を取っている。なるべくならフォームを開きなす事をした くないので最初の実行時に変数として取り込みたい。

  • Kシェルの変数に*を格納したい

    【やりたいこと】 *(アスタリスク)を変数に格納したい sql="select * from abc" echo $sql 【問題点】 上記を実行すると下記のように表示され、*がカレントディレクトリのファイル一覧を展開します select カレントディレクトリのファイル一覧 from abc 何かヒントをお願いします