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

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

C# と VB.NET の入門サイト

Re[13]: csvファイルをデータベースに取り込む方法


(過去ログ 31 を表示中)

[トピック内 17 記事 (1 - 17 表示)]  << 0 >>

■14234 / inTopicNo.1)  csvファイルをデータベースに取り込む方法
  
□投稿者/ ゆずぽん (1回)-(2008/02/13(Wed) 17:47:33)

分類:[ASP.NET (C#)] 

環境:VisualStudio2005
   .NET Framework2.0
Windows XP

ご教授をお願い致します。
csvファイルをデータベース(Oracle)に取り込みたいのですが、
方法の見当がつきません。

取り込みの手順
1.ユーザーがcsvファイルを任意のディレクトリに用意する。
2.画面のボタンをクリックするとcsvファイルがデータベースに取り込まれる。


下記の書き込みを参考にしてみたのですが、SqlConnectionが使用できませんでした。
http://bbs.wankuma.com/index.cgi?mode=al2&namber=5644&KLOG=16

キーワードや参考になるサイト等があれば教えていただけないでしょうか。


引用返信 編集キー/
■14239 / inTopicNo.2)  Re[1]: csvファイルをデータベースに取り込む方法
□投稿者/ かずき (18回)-(2008/02/13(Wed) 18:50:29)
かずき さんの Web サイト
どこら辺が見当つきませんか?

csvファイルを読み込んでカンマ区切り(実際にはもうちょい複雑だけど)で区切る所ですか?
データベースにつないでinsert文を発行するところですか?

> 下記の書き込みを参考にしてみたのですが、SqlConnectionが使用できませんでした。
> http://bbs.wankuma.com/index.cgi?mode=al2&namber=5644&KLOG=16
因みにSqlConnectionは、SQL Serverへつなぐためのクラスです。
OracleではOracle固有のクラスを使ったりします。
汎用的に作るならファクトリとか使ってやったりはしますが今回はOracle固有のクラス使うのでOKだと思います。
参考になるサイトはGoogleで検索すればいっぱい出ると思います。
http://www.google.com/search?hl=ja&lr=&ie=UTF-8&oe=UTF-8&num=50&q=.net+oracle
引用返信 編集キー/
■14243 / inTopicNo.3)  Re[2]: csvファイルをデータベースに取り込む方法
□投稿者/ ゆずぽん (2回)-(2008/02/13(Wed) 19:12:59)
No14239 (かずき さん) に返信

かずき様

ご回答いただいてありがとうございます。
質問の仕方自体が分かっていないというか、勉強不足でした。申し訳ありません。


> csvファイルを読み込んでカンマ区切り(実際にはもうちょい複雑だけど)で区切る所ですか?

まず、csvファイルの読み込みの方法が分かりません。
質問後に検索した結果、System.IO.StreamReaderが使用できる様なので現在試しているところです。


もう少し自分で調べてみて結果報告をさせていただきます。
引用返信 編集キー/
■14253 / inTopicNo.4)  Re[3]: csvファイルをデータベースに取り込む方法
□投稿者/ HiJun (93回)-(2008/02/13(Wed) 23:32:35)
カンマ区切りのファイルであれば、Oracleのsqlldrで取り込むことも可能です。
引用返信 編集キー/
■14254 / inTopicNo.5)  Re[4]: csvファイルをデータベースに取り込む方法
□投稿者/ 片桐 (70回)-(2008/02/13(Wed) 23:37:11)
片桐 さんの Web サイト
検索キーワード

CSV インポート Oracle

そうですね、やり方にもよりますが、こちらのキーワードでも参考になる情報がとれるかと

SQL*Loader


引用返信 編集キー/
■14357 / inTopicNo.6)  Re[5]: csvファイルをデータベースに取り込む方法
□投稿者/ ゆずぽん (3回)-(2008/02/15(Fri) 20:17:17)
2008/02/15(Fri) 20:53:19 編集(投稿者)



HiJun様、片桐様ご返信ありがとうございます。

SQL*LOADERについて調べてみましたが、csvの1行目が項目名のため2行目から取り込みを行いたいので
System.IO.StreamReaderを使うことにしました。
まだ未完成ですが、インポートできそうです。

もう1つ別に質問があります。
取り込むcsvをディレクトリを参照して選択する方法は何かないでしょうか。
FileUploadのダウンロードバージョンのようなものがあればよいのですが、ないようです。
ご教授をお願い致します。
引用返信 編集キー/
■14362 / inTopicNo.7)  Re[6]: csvファイルをデータベースに取り込む方法
□投稿者/ はつね (454回)-(2008/02/16(Sat) 01:30:51)
No14357 (ゆずぽん さん) に返信
> SQL*LOADERについて調べてみましたが、csvの1行目が項目名のため2行目から取り込みを行いたいので

SQL*Loaderで1行目スキップもできますよ。

引用返信 編集キー/
■14384 / inTopicNo.8)  Re[7]: csvファイルをデータベースに取り込む方法
□投稿者/ ゆずぽん (4回)-(2008/02/16(Sat) 23:47:24)
No14362 (はつね さん) に返信


はつね様

ご返信ありがとうございます。

> SQL*Loaderで1行目スキップもできますよ。
SQL*LOADERでの取り込みも方法の一つとして
試してみたいと思います。
引用返信 編集キー/
■14764 / inTopicNo.9)  Re[8]: csvファイルをデータベースに取り込む方法
□投稿者/ ゆずぽん (5回)-(2008/02/26(Tue) 20:55:29)
データ数が少ないことと区切り文字である「,」がデータに含まれていた場合にエラー表示を
出したいので今回はSQL*LOADERではなく1行ずつ取込むことに致しました。

そこで質問なのですが、データにカンマが含まれていた場合にエラーを表示させる方法を
ご教授いただけませんでしょうか。
よろしくお願い致します。

private void csv_LOAD()
        {

            System.IO.StreamReader reader = new System.IO.StreamReader(@"C:\a.csv", System.Text.Encoding.GetEncoding("Shift-JIS"));
            ArrayList alData = new ArrayList();
            while (reader.Peek() != -1)
            {
                
                alData.Add(reader.ReadLine().Split(','));

            }

            reader.Close();

            foreach (string[] astrData in alData)
            {
                            
                            foreach (string strData in astrData)
                            {
                                Console.Write("{0},", strData);
       
                                string a = astrData[0] as string;
                                string b = astrData[1] as string;
                                ・
                ・
                ・
                                break;

                            }
                       
              }

            }

 

 

引用返信 編集キー/
■14779 / inTopicNo.10)  Re[9]: csvファイルをデータベースに取り込む方法
□投稿者/ HiJun (95回)-(2008/02/26(Tue) 23:23:55)
データの区切りとしてのカンマなのかデータの中にカンマが入っているのかを判断する材料を
見つければ良いのではないかと思います。
例えば、「"」で囲まれている場合はデータの中のもので、それ以外はデータの区切りの扱いにするとか...
引用返信 編集キー/
■14796 / inTopicNo.11)  Re[10]: csvファイルをデータベースに取り込む方法
□投稿者/ ゆずぽん (6回)-(2008/02/27(Wed) 09:22:10)
No14779 (HiJun さん) に返信
> データの区切りとしてのカンマなのかデータの中にカンマが入っているのかを判断する材料を
> 見つければ良いのではないかと思います。
> 例えば、「"」で囲まれている場合はデータの中のもので、それ以外はデータの区切りの扱いにするとか...

HiJun様
ご回答ありがとうございます。

csvの形式を書き込んでおりませんでした。失礼致しました。
下記のようになっており、「"」が使用されておりません。
一行に含まれるカンマの数をカウントして規定のカンマ数でない時はエラーを出そうと思って試しては
いるのですが、カンマのカウント方法が見つかりません。

何か他によい方法があれば教えていただけませんか。

001,株式会社○○,,,,,,000000000-001,10,……
引用返信 編集キー/
■14801 / inTopicNo.12)  Re[11]: csvファイルをデータベースに取り込む方法
□投稿者/ επιστημη (841回)-(2008/02/27(Wed) 10:03:16)
επιστημη さんの Web サイト
> 一行に含まれるカンマの数をカウントして規定のカンマ数でない時はエラーを出そうと思って試しては
> いるのですが、カンマのカウント方法が見つかりません。

数行のコードを書くだけですけども。

public class Program {
  public static void Main() {
    string input = "この,文字列には,カンマが,入って,います";
    int count = 0;
    foreach ( char ch in input ) {
      count += (ch == ',') ? 1 : 0;
    }
    System.Console.WriteLine("カンマを{0}個見つけました", count);
  }
}

引用返信 編集キー/
■14803 / inTopicNo.13)  Re[12]: csvファイルをデータベースに取り込む方法
□投稿者/ やじゅ (191回)-(2008/02/27(Wed) 10:40:43)
No14801 (επιστημη さん) に返信
> > 一行に含まれるカンマの数をカウントして規定のカンマ数でない時はエラーを出そうと思って試しては
>>いるのですが、カンマのカウント方法が見つかりません。
>

// 必要な変数を宣言する
string stCsvData = "5, Jitta, ABC";
// カンマ区切りで分割して配列に格納する
string[] stArrayData = stCsvData.Split(',');

if(stArrayData.Length >= xx)

引用返信 編集キー/
■14804 / inTopicNo.14)  Re[13]: csvファイルをデータベースに取り込む方法
□投稿者/ επιστημη (842回)-(2008/02/27(Wed) 11:05:26)
επιστημη さんの Web サイト
> int columns = stCsvData.Split(',').Length;

エレガントだけどナタで髭剃るよな仰々しさを感じます ^^;

引用返信 編集キー/
■14805 / inTopicNo.15)  Re[11]: csvファイルをデータベースに取り込む方法
□投稿者/ はつね (476回)-(2008/02/27(Wed) 11:22:36)
はつね さんの Web サイト
No14796 (ゆずぽん さん) に返信
> csvの形式を書き込んでおりませんでした。失礼致しました。
> 下記のようになっており、「"」が使用されておりません。

データ中にカンマがないのに「"」が使われていないということですね(CSVっぽいCSVじゃないデータという事になるのかな)。
だとしたら、SQL*Loaderでやってもカンマの数が合わないので該当行はエラーありとなり、不良レコードとして識別できますね。
この場合、ERRORSオプションをデータ行数と一致させて最後までローディングするように指定するのが注意点です。そうじゃないと途中で止まっちゃうかもなので。

引用返信 編集キー/
■14807 / inTopicNo.16)  Re[12]: csvファイルをデータベースに取り込む方法
□投稿者/ ゆずぽん (8回)-(2008/02/27(Wed) 11:36:43)
やじゅ様、επιστημη様、はつね様ご回答ありがとうございます。

皆様の書き込みを元に試してみます。
うまくできましたらまたご報告させていただきます。
引用返信 編集キー/
■14875 / inTopicNo.17)  Re[13]: csvファイルをデータベースに取り込む方法
□投稿者/ ゆずぽん (10回)-(2008/02/28(Thu) 10:38:52)
 int commacnt = 0;
 foreach (string[] astrData in alData)
            {
                commacnt = astrData.Length;
                if (commacnt != 23)
                {
                    break;
                }
                else
                {
        }
上記を書き加えることによってエラーを出せるようになりました。
処理速度をチェックをして対応できないようなら
SQL*LOADERでの方法も考えてみたいと思います。

>取り込むcsvをディレクトリを参照して選択する方法は何かないでしょうか。
>FileUploadのダウンロードバージョンのようなものがあればよいのですが、ないようです。
これについては、ファイル名を指定してCドライブに置くことで対処することになりました。

この度ご回答いただいた皆様、改めてお礼を申し上げます。
ありがとうございました。


 

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -