質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

Q&A

解決済

3回答

11003閲覧

C# テーブル項目名・各項目のデータを抽出したい

toyamaken

総合スコア7

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

0グッド

0クリップ

投稿2018/06/06 03:23

C# テーブル項目名・各項目のデータを抽出したい

プログラミングを始めて2ヶ月の初心者です。

C#でoracleのDBからテーブル項目名とそのデータを抽出し、
それをcsvファイルに出力したいです。
csvファイルに出力した際に、
1行目にとあるテーブルの項目名があって
2行目からは1行目の項目名に沿ったデータがある、という形にしたいのです。
(分かり辛くてすみません)
会社の課題で行っているのですが全くわかりません。

以下form1

C#

1 2using System; 3using System.Collections.Generic; 4using System.ComponentModel; 5using System.Data; 6using System.Drawing; 7using System.Linq; 8using System.Text; 9using System.Windows.Forms; 10using System.Text.RegularExpressions; 11using System.IO; 12using System.Configuration; 13using Oracle.DataAccess.Client; 14 15 //(ここにセーブファイルダイアログを開くコードがあるのですが省略します) 16 17 private void button2_Click(object sender, EventArgs e) 18 { 19 //DB接続情報を作成   20 var connectionString = "User Id=ID; Password=PASS; Data Source=DS"; 21 // データベース接続の準備 22 OracleConnection conn = new OracleConnection(connectionString); 23 24 List<Class1> value = new List<Class1>();//class1 25 String tblname = String.Empty; 26 using (StreamWriter sw = new System.IO.StreamWriter(textBox2.Text, false, Encoding.Default)) 27 //テーブル項目名のセレクト 28 try 29 { 30 conn.Open(); 31 OracleCommand cmd = new OracleCommand() 32 { 33 Connection = conn, 34 CommandText = @"SELECT * FROM ALL_TAB_COLUMNS, 35 WHERE TABLE_NAME = 'テーブル名',ORDER BY COLUMN_ID asc" 36 }; 37 OracleDataReader reader = cmd.ExecuteReader(); 38 39 if (reader.HasRows) 40 { 41 while (reader.Read()) 42 { 43 tblname = new Class1().ToString(); 44 tblname = reader["COLUMN_NAME"].ToString(); 45 value.Add(tblname); 46 } 47 } 48 } 49 catch 50 { 51 } 52 53 //データ抽出のためのselect 54 try 55 { 56 // データベースの接続開始 57 conn.Open(); 58 // 実行 59 OracleCommand cmd = new OracleCommand() 60 { 61 Connection = conn, 62 CommandText = @"SELECT * 63 FROM テーブル名" 64 }; 65 //クエリを実行 66 OracleDataReader reader = cmd.ExecuteReader(); 67 68 using (StreamWriter sw = new System.IO.StreamWriter(textBox2.Text, false, Encoding.Default)) 69 if(reader.HasRows) 70 { 71 //DBからデータを読み込む 72 while (reader.Read()) 73 { 74 foreach() 75 { 76 //class1を出力する処理 77 78 //出力 79 //string DQ = "\""; 80 //sw.WriteLine(Environment.NewLine);// 81 //sw.Write(WriteLine); 82 } 83 } 84 } 85 } 86 87 //例外処理 88 catch (Exception exception) 89 { 90 MessageBox.Show("処理が正しく行えませんでした。"); 91 Console.WriteLine(exception.Message); 92 } 93 94 //必ず通る処理 95 finally 96 { // 接続を解除 97 conn.Close(); 98 } 99 100 MessageBox.Show("出力完了"); 101 }

for eachを使えば項目名とデータを取得できると(教育係の方から)聞いたので
なんとか使って csvファイルへ出力できれば…と思うのですが…
もうこの課題だけでかなり時間が経っています。
インターネットで検索したり、同期に教えて貰いながらなんとかここまでは書けましたが
正直もう終わる気がしないです。
ヒントだけでも良いので教えてほしいです。

よろしくおねがいします。

補足情報(FW/ツールのバージョンなど)

・visualstudio2010のc#を使用しています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/06/06 03:42

なぜ「教育係の方」に聞かないのですか? 宿題とか会社の研修の課題などをこういうところで聞くのは、特にやむを得ぬ事情がない限り、まず歓迎されないのが普通なのですけど・・・
toyamaken

2018/06/06 03:52

教育係の方には、やり方や何を使ったらいいか~等色々教わってはいるのですが、忙しく、会社にいる時間が殆ど取れないので、その方のレスポンスを待つ間に何かヒントがもらえればいいな…と思い質問しました。でも自分でやらなければいけない事ですので あまりこういう場で聞くのは良くないですよね… 気をつけます。
guest

回答3

0

C#でoracleのDBからテーブル項目名とそのデータを抽出

OracleDataReaderのリファレンス

↑「自分で調べる」ってのも大事です。
上記をちゃんと読めば列名の取り方もデータの抽出方法も分かります。

for eachを使えば項目名とデータを取得できると

foreach、in(C#リファレンス)

↑同じく、foreachの書き方もここを読んで学びましょう。

投稿2018/06/06 04:22

tkturbo

総合スコア5572

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

toyamaken

2018/06/06 05:10

ありがとうございます。そのページを読んでまたやってみます。
guest

0

ベストアンサー

何が出来ていて、何が出来ていないのか明確にしましょう。
明確にするには、自分が作成すべき処理をなるべく細分化して考えるべきだと
思います。

今回の場合ですと大雑把に書いて以下の流れになるかと思います。
1.データベースへ接続する
2.対象テーブルの項目を取得する。
3.取得した項目をcsvファイルの1行目に出力する。
4.対象テーブルのデータを取得する。
5.取得したデータの1レコードを1行の文字列データとして構築する
6.構築した文字列をcsvファイルに1行として出力する
7.5~6の処理をレコードがなくなるまで繰り返す。

自分が分からない部分を明確にすれば、質問する内容も漠然とした物ではなくなるはずなので、回答する側(ネット、上司問わず)も答えやすくなります。

投稿2018/06/06 04:21

YAmaGNZ

総合スコア10242

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

toyamaken

2018/06/06 05:15

流れはその通りですね…。確かに、私は分からない事がなんなのか分かっていなかったです。 何も分かっていないのにやろうとしてもだめですよね。漠然としすぎていて上司も答えにくかっただろうと思います。ありがとうございました。同期と相談しながら引き続きやってみます。
guest

0

C#は使っていませんが、
SQL*Plusでテーブル名を指定してcsv出力 [Tips# 764]
SQLPlusでSQLを実行した結果をもういちどSQLPlusで実行(リダイレクトと言います)することでCSVを出力します。SQLが理解できれば1行目に列名を出力する方法もわかるでしょう。
&TABLE はバインド変数でテーブル名を渡します。バインド変数の使い方はマニュアル[SQL*Plusユーザーズ・ガイドおよびリファレンス]に載っています。

投稿2018/06/06 06:18

Orlofsky

総合スコア16415

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

toyamaken

2018/06/07 06:30

回答ありがとうございます!SQLは少ししか触れていないのでいまいちよく分かりません。 せっかくなのでこの機会にいろいろ調べてみようと思います。
Orlofsky

2018/06/07 06:38

SQLでできることはSQLで実現したほうがパフォーマンスや保守性が高い場合が多いです。きちんと勉強しておいて損はありません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問