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

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

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

256文字以上のCSVファイル


(過去ログ 7 を表示中)

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

■7464 / inTopicNo.1)  256文字以上のCSVファイル
  
□投稿者/ CANLOP 二等兵(1回)-(2006/10/12(Thu) 19:25:03)

分類:[C#] 


分類:[C#] 

分類:[VB.NET] 

初投稿です。お世話になります。

[開発環境]
VisualStudio 2003
Access 2003

CSVファイルを読み込み、読み込んだ内容をDataSetに格納したいのですが、
1フィールドに対して256文字以上の文字列を格納しようとしたところ、
255文字で切れてしまいます。

これは、OLEDB4.0の仕様なのでしょうか?
色々と調べてはみたのですが、原因が分かりません。
どなたかご存知の方がいらっしゃれば、ご教授の程よろしくお願いします。

以下、サンプルソースです。


Dim csvConn As New OleDbConnection
Dim csvCommand As New OleDbCommand
Dim csvDataAdapter As New OleDbDataAdapter
Dim csvDataSet As New DataSet

csvConn.ConnectionString = _
"Provider=Microsoft.Jet.OLEDB.4.0;" + _
"Data Source=" + directoryPath + ";" + _
"Extended Properties=""Text;HDR=YES;FMT=Delimited"""

csvCommand.Connection = csvConn
csvCommand.CommandText = [SQL文]
csvDataAdapter.SelectCommand = csvCommand
csvDataAdapter.Fill(csvDataSet)


以上、よろしくお願いします。

0
引用返信 編集キー/
■7466 / inTopicNo.2)  Re[1]: 256文字以上のCSVファイル
□投稿者/ 黒龍 二等兵(18回)-(2006/10/12(Thu) 19:46:57)

分類:[C#] 

No7464に返信(CANLOPさんの記事)
> 分類:[VB.NET] 
>
> 初投稿です。お世話になります。
>
> [開発環境]
> VisualStudio 2003
> Access 2003
>
> CSVファイルを読み込み、読み込んだ内容をDataSetに格納したいのですが、
> 1フィールドに対して256文字以上の文字列を格納しようとしたところ、
> 255文字で切れてしまいます。
>
> これは、OLEDB4.0の仕様なのでしょうか?
> 色々と調べてはみたのですが、原因が分かりません。
> どなたかご存知の方がいらっしゃれば、ご教授の程よろしくお願いします。
>
> 以下、サンプルソースです。
>
>
> Dim csvConn As New OleDbConnection
> Dim csvCommand As New OleDbCommand
> Dim csvDataAdapter As New OleDbDataAdapter
> Dim csvDataSet As New DataSet
>
> csvConn.ConnectionString = _
> "Provider=Microsoft.Jet.OLEDB.4.0;" + _
> "Data Source=" + directoryPath + ";" + _
> "Extended Properties=""Text;HDR=YES;FMT=Delimited"""
>
> csvCommand.Connection = csvConn
> csvCommand.CommandText = [SQL文]
> csvDataAdapter.SelectCommand = csvCommand
> csvDataAdapter.Fill(csvDataSet)
>
>
> 以上、よろしくお願いします。
Textだと255文字になっちゃいますね。Memoを使うようにしましょう。

0
引用返信 編集キー/
■7467 / inTopicNo.3)  Re[2]: 256文字以上のCSVファイル
□投稿者/ CANLOP 二等兵(2回)-(2006/10/12(Thu) 20:19:13)

分類:[C#] 

No7466に返信(黒龍さんの記事)
> ■No7464に返信(CANLOPさんの記事)
>>分類:[VB.NET] 
>>
>>初投稿です。お世話になります。
>>
>>[開発環境]
>>VisualStudio 2003
>>Access 2003
>>
>>CSVファイルを読み込み、読み込んだ内容をDataSetに格納したいのですが、
>>1フィールドに対して256文字以上の文字列を格納しようとしたところ、
>>255文字で切れてしまいます。
>>
>>これは、OLEDB4.0の仕様なのでしょうか?
>>色々と調べてはみたのですが、原因が分かりません。
>>どなたかご存知の方がいらっしゃれば、ご教授の程よろしくお願いします。
>>
>>以下、サンプルソースです。
>>
>>Dim csvConn As New OleDbConnection
>>Dim csvCommand As New OleDbCommand
>>Dim csvDataAdapter As New OleDbDataAdapter
>>Dim csvDataSet As New DataSet
>>
>>csvConn.ConnectionString = _
>>"Provider=Microsoft.Jet.OLEDB.4.0;" + _
>>"Data Source=" + directoryPath + ";" + _
>>"Extended Properties=""Text;HDR=YES;FMT=Delimited"""
>>
>>csvCommand.Connection = csvConn
>>csvCommand.CommandText = [SQL文]
>>csvDataAdapter.SelectCommand = csvCommand
>>csvDataAdapter.Fill(csvDataSet)
>>
>>以上、よろしくお願いします。
> Textだと255文字になっちゃいますね。Memoを使うようにしましょう。


黒龍さんお返事有難うございます。

> Textだと255文字になっちゃいますね。Memoを使うようにしましょう。
この「Memo」を使うというのは、

"Extended Properties=""Memo;HDR=YES;FMT=Delimited"""

このような使い方をするということでしょうか?
実際に適応してみたところ、エラーが出てしまいました。
もし宜しければ、具体的な例を教えて頂けないでしょうか。

※私の文言が悪かったかもしれないので、補足を・・・
Accessに256文字以上格納できないのではなくて、
DataSetにデータを格納する際に、既に255文字で切られてしまっているのです。

0
引用返信 編集キー/
■7468 / inTopicNo.4)  Re[3]: 256文字以上のCSVファイル
□投稿者/ 中博俊 神(793回)-(2006/10/12(Thu) 20:51:39)

分類:[C#] 

OLEDBで何故読み出すのか・・・(^^;;
縛りがあるんでなければ、これでもお使いください。

http://naka.wankuma.com/site/library/dotnet1.1/Wankuma.IO.CSV1d.htm


0
引用返信 編集キー/
■7469 / inTopicNo.5)  Re[3]: 256文字以上のCSVファイル
□投稿者/ ROY 一等兵(32回)-(2006/10/12(Thu) 20:53:50)

分類:[C#] 

OLEDB4.0でうまくいかないなら、
ファイルをストリームなどでを読み込んで
それをテーブルに放り込む方法で実現
できるのでは?



0
引用返信 編集キー/
■7471 / inTopicNo.6)  Re[3]: 256文字以上のCSVファイル
□投稿者/ 魔界の仮面弁士 大尉(178回)-(2006/10/12(Thu) 22:26:26)

分類:[C#] 

>>> 1フィールドに対して256文字以上の文字列を格納しようとしたところ、
>>> 255文字で切れてしまいます。
>> Textだと255文字になっちゃいますね。Memoを使うようにしましょう。

Jet 4.0 の場合、固定長/可変長テキスト型は最大255文字まで、
メモ型は、最大536,870,910 文字までという制限があります。

Text I-ISAM モードや、Text ODBC Driver 経由での操作に関しても、
これと同様の縛りが生じます。

たとえば Microsoft Access で、CSV にリンクテーブルを貼る場合で言えば、
テキストリンクウィザードの[設定]ボタンから、リンク定義として
『テキスト型』が指定された場合と、『メモ型』が指定されていた場合とで、
文字列の上限値が異なる仕様になっています。


> この「Memo」を使うというのは、
> "Extended Properties=""Memo;HDR=YES;FMT=Delimited"""
> このような使い方をするということでしょうか?

Extended Properties パラメータでは指定できません。
Text I-ISAM の場合、フィールドの型定義は、CSV ファイルと同じフォルダに対して、
schema.ini というファイルを配置することによって行われます。たとえばその内容は、

[sample.csv]
ColNameHeader=False
Format=CSVDelimited
CharacterSet=OEM
Col1=F1 Integer
Col2=F2 LongChar
Col3=F3 Char

のような内容となります。
(詳細は、Jetデータベースエンジン プログラマーズ ガイド などを参照の事)



> Accessに256文字以上格納できないのではなくて、

ちなみに、Microsoft Access のユーザーインターフェイス経由では、
65,535 文字上限となったりしますね。


> DataSetにデータを格納する際に、既に255文字で切られてしまっているのです。

DataTable 側で、そのフィールドの最大長は幾つに設定されていますか?

0
引用返信 編集キー/
■7472 / inTopicNo.7)  Re[4]: 256文字以上のCSVファイル
□投稿者/ CANLOP 二等兵(3回)-(2006/10/12(Thu) 22:31:12)

分類:[C#] 

No7468に返信(中博俊さんの記事)
> OLEDBで何故読み出すのか・・・(^^;;
> 縛りがあるんでなければ、これでもお使いください。
>
> http://naka.wankuma.com/site/library/dotnet1.1/Wankuma.IO.CSV1d.htm
>

中博俊さん・ROYさん
お返事、有難うございます。

> OLEDBで何故読み出すのか・・・(^^;;
CSVファイルのデータ数が3万弱、Column数が50程有り、
量からして、OLEDBを使用した方が速度的には早いのではと思い、使用しました。
(実際に早いのかは、分からないのですが・・・)

>ファイルをストリームなどでを読み込んで
OLEDBが使えなければ、こちらの方の手段でDataSetを作成しようと考えていました。

お二方共、お返事有難うございました。
明日にでも、中博俊さんが紹介して下さったサイトを参考に、実装してみたいと思います。

でも、何故OLEDBでCSVファイルを読み込んだ際に256文字以降の値が切れてしまうのでしょうか・・・
もう少し、調査してみようと思います。有難うございました。

0
引用返信 編集キー/
■7473 / inTopicNo.8)  Re[4]: 256文字以上のCSVファイル
□投稿者/ CANLOP 二等兵(4回)-(2006/10/12(Thu) 23:39:30)

分類:[C#] 

No7471に返信(魔界の仮面弁士さんの記事)
魔界の仮面弁士さん、ご丁寧なお返事ありがとうございます。

> Jet 4.0 の場合、固定長/可変長テキスト型は最大255文字まで、
> メモ型は、最大536,870,910 文字までという制限があります。
> Text I-ISAM モードや、Text ODBC Driver 経由での操作に関しても、
> これと同様の縛りが生じます。
ドライバにおいてもテキスト型・メモ型の指定があったのですね。私の勉強不足でした。

> Extended Properties パラメータでは指定できません。
> Text I-ISAM の場合、フィールドの型定義は、CSV ファイルと同じフォルダに対して、
> schema.ini というファイルを配置することによって行われます。たとえばその内容は、
>
> [sample.csv]
> ColNameHeader=False
> Format=CSVDelimited
> CharacterSet=OEM
> Col1=F1 Integer
> Col2=F2 LongChar
> Col3=F3 Char
>
> のような内容となります。
> (詳細は、Jetデータベースエンジン プログラマーズ ガイド などを参照の事)
MSDNにschema.iniについての記載を見つけることができました。
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/odbc/htm/odbcjetschema_ini_file.asp
これらを参考にして実装してみたいと思います。

しかし、Extended Properties パラメータで「テキスト型」は指定できるのに
「メモ型」は指定できないというのは不思議ですね、「メモ型」も指定できれば良いのですが。

> DataTable 側で、そのフィールドの最大長は幾つに設定されていますか?
この辺りは特に何も意識せず、サンプルソースにあるように、
DataSetを生成し、そのままFillしているという形にしています。


上記の私の書き込みと入れ違いになってしまいましたが、
>でも、何故OLEDBでCSVファイルを読み込んだ際に256文字以降の値が切れてしまうのでしょうか・・・
この部分についての疑問も解決し、非常に為になりました。ありがとうございました。


0
引用返信 編集キー/
■7474 / inTopicNo.9)  Re[5]: 256文字以上のCSVファイル
□投稿者/ 魔界の仮面弁士 大尉(179回)-(2006/10/12(Thu) 23:51:31)

分類:[C#] 

> しかし、Extended Properties パラメータで「テキスト型」は指定できるのに

指定できません。

勘違いがあるようですが、Extended Properties の先頭にくる "Text;" は、
データ型の指定ではなく、データソースの種類(ISAM Formats)を意味します。

Text; の部分を変更することで、CSV だけでなく、HTML Table、dBASE ファイル、
Excel、Lotus 1-2-3、Microsoft Exchange、Outlook、Paradox、SharePoint など
多種のデータソースを扱えるようになる……というものです。

0
引用返信 編集キー/
■7485 / inTopicNo.10)  Re[6]: 256文字以上のCSVファイル
□投稿者/ 黒龍 二等兵(19回)-(2006/10/13(Fri) 11:23:55)

分類:[C#] 

私も勘違いしていたので混乱させてしまいました。申し訳ない。


0
引用返信 編集キー/
■7507 / inTopicNo.11)  Re[6]: 256文字以上のCSVファイル
□投稿者/ CANLOP 二等兵(5回)-(2006/10/14(Sat) 09:46:46)

分類:[C#] 

No7474に返信(魔界の仮面弁士さんの記事)

> 勘違いがあるようですが、Extended Properties の先頭にくる "Text;" は、
> データ型の指定ではなく、データソースの種類(ISAM Formats)を意味します。
なるほど。意味合いが違うのですね・・・。
"Text";で、フィールドを「メモ型」としたいのであれば、schema.iniを作成する。

分かりました。ありがとうございます。

>黒龍さん
私の書き方も悪かったと反省しております。
開発環境に「Access」と記載してしまったのも混乱を招いた原因ですね。すいませんでした。


皆様、色々とご教授頂き、ありがとうございました。
また、ここを利用させて頂く事があるかもしれませんが、その時も宜しくお願い致します。

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


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

このトピックに書きこむ

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

管理者用

- Child Tree -