• 締切済み

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

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

みんなの回答

  • 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で生成することぐらいでしょうか。