- - PR -
ExcelデータのDB取り込み処理について
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2004-09-17 18:15
いつも参考にさせてもらっております。
C#.netでwebアプリを作成しております。 ExcelをDBに保存するプログラムで行き詰まっております。 byte配列に格納し、SQLにてInsert処理を行っているのですが、 保存できるデータと、できないデータがあり、その区別がわからない状況です。 以下ソース--------------------------- objInfile:HtmlInputFileのコントロールです System.IO.Stream ioStream; ioStream = objInfile.PostedFile.InputStream // ファイルを読み込むバイト型配列を作成する byte[] bs = new byte[ioStream.Length]; // ファイルの内容をすべて読み込む ioStream.Read(bs, 0, bs.Length); ------------------------------------ 上記で取得したデータをblod型のフィールドスペースにセットしています。 ODBCCommand.CommandText でSQL文を発行 ODBCCommand.Parameters.add で指定のフィールドにbyte配列をセット ODBCCommand.ExecuteNonQuery で実行 byte配列化した時にデータの破損がおこっているのでしょうか? もし、ご存知の方がいらっしゃればお教えいただきたいのですが。 よろしく御願い致します。 | ||||
|
投稿日時: 2004-09-17 18:49
[HOW TO] Visual C# .NET で ADO.NET を使用した BLOB データの読み取りと書き込みの方法
にSqlCommandBuilderを使う方法があります。 http://www.google.com/search?q=C%23+ADO.NET+BLOB&lr=lang_ja | ||||
|
投稿日時: 2004-09-17 20:58
回答ありがとうございます。
ご指示いただいたページのプログラムも一通り目を通しており 実践済みですが、やはり取り込めない状況です。 あれこれ探してロジックを簡潔にした結果が、提示しているソースです。 全てが取り込めないならまだあきらめもつきますが、 取り込めるものとできないものがあるというのが 原因がわからず困っています。 | ||||
|
投稿日時: 2004-09-17 21:47
真空牙さん、こんばんは。
そういう場合はどういう条件でOK/NGの違いが出るのか、ステップ実行でじっくり追い込んでいきましょう。 ところで、取り込めない、というのはエラーが出たりとかするんですか? | ||||
|
投稿日時: 2004-09-18 00:08
回答ありがとうございます。
ステップ実行も行っていますが・・・データの値を増減させてbyte数を 変えてみたり、オブジェクト貼ってみたりと。 ですが、byte数が小さくても取り込めなかったり、大きくても 取り込めたりとなっています。 ちなみにエラーはログをはくようにしていて System.Data.Odbc.OdbcException: ERROR [42000] [MySQL][ODBC 3.51 Driver][mysqld-4.0.20a-nt]You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'ュI・ー.、)\0\0X\0\0\0\0\0\0・0\0\0\0\r | ||||
|
投稿日時: 2004-09-18 02:08
こんばんは。
Excelのデータがおかしい場合はどうでしょう? 僕はDataSetにあるテーブルのキーになる値が入ったExcelのデータを取り込んで、その中のDataTableをループさせて対象のテーブルにその値をWhere条件にしてSQLを発行してデータを取得しました。その過程でキーになるフィールドにあわせてCtypeでString型に変換したんですけど、Excelのデータがおかしいレコードについては中身がVBNullになっていてStringに変換する段階でエラーになってました。 | ||||
|
投稿日時: 2004-09-18 14:32
えーっと、Excel用のODBCドライバの仕様で、複数の行からなるレコードで、同一の
列で文字列として認識できる行(レコード)と、数字として認識できる行が混在して いると、その列が文字列なのか、数字なのかは多数決で決定されます。 そしてここからが問題なのですが、多数派は問題なくデータが取り出せますが、 少数派のデータはnullになります。つまり、例をあげると、A列で、10個のセル の値がA、9個のセルの値が1であった場合、9個のセルは値1が取り出せるのではなく、 nullとなります。 これはMSの仕様ですので、回避策はありません。データソースとしてはExcel ではなく、Accessを使うべきです。Accessならこの問題はありません。 | ||||
|
投稿日時: 2004-09-18 16:14
こんにちは。 まあ、確かにそうなのかもしれませんが、この場合はExcelでやる事に意味があるので、少数派のデータが読み込まれた時の対処をしてあげればいいんではないでしょうか?ユーザーの要求がExcelのデータのインポートであるのかもしれませんし・・・。 例えば、取り込めなかったデータを取り込める部分だけでもDataTableに格納してDataGrid上でユーザーに修正してもらってから登録するとか・・。 |