• 締切済み

C# accessデータ取得 メモ型が途切れる

お世話になっております。 accessのデータをC#で取得して、それを加工して csvに出力するプログラムを作っています。 SQLで取得して、OleDA.Fill(dataSetItem, "item"); とした後、dataSetItemの取得したデータを見ると accessでメモ型にしていた項目の データが完全に取得できなく、途中で途切れてしまいます。 以下は設定の説明です。 accessで、文字列が長く、htmlが含まれている項目をメモ型に設定。 XMLスキーマのメモ型の項目のデータタイプはSystem.Stringです。 SQL文はデータ加工せず、「SELECT * 」で取得しています。 データタイプはSystem.String以外にObjectがありましたが 同じく取得できませんでした。 ご教授お願い致します。

みんなの回答

回答No.1

SELECT * で取得せず、項目名を指定して取得。 必要ならば型変換、受け取り側の項目の長さを指定して行う。 特に長さが可変で入っている場合など、最初に取得したデータが短いと その項目の長さで宣言されることがあり、次行以降が短いままで入ることがあります。

関連するQ&A

  • C#でアクセスからデータを抽出できません。

    アクセスのデータを部分一致の検索で抽出しようとしていますが、結果が0件になってしまいます。 作成したSQL文は以下のように作成しております。 string selectcommand = string.empty; string testid = "1"; selectcommand = string.Format("select * from TastTable where ID like '*{0}*'", testid); ・アクセスを開いて、結果が0件になるSQL文を直接入力して実行すると正しい結果が返ってきます。  (IDに1が含まれている行が全てヒットします。) ・上記SQL文の「'*{0}*'」を「'{0}'」とすると、ちゃんとIDが1の人のみヒットするので、*がいけない?  でもアクセスに直接SQL文を打ち込むと正しい結果が返ってくるのは何故でしょう・・・ 基本的な質問でしたら申し訳御座いませんが、宜しくお願い致します。

  • OLE でACCESSデータを取得するとメモ型の内容255文字で切れてしまう

    お世話になります。 ■開発環境  VisualBasic2008 Express Edition  ACCESS2003(データ) ■質問内容  VBでaccessのmdbからデータを取得し、画面に表示しようと  しています。  ところが、メモ型の項目が255文字で切れてしまいます。  webでいろいろと調べましたが、jetエンジンの問題かなという  ところまではたどり着いたのですが、具体的にどうすれば改善  できるのかわかりません。  わかる方教えていただけないでしょうか。  よろしくお願いいたします。 ■ソース Dim SQL As String Dim Cn As OleDb.OleDbConnection = New OleDb.OleDbConnection( _ "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="c:\message.mdb;") Dim dAdp As OleDb.OleDbDataAdapter Dim dView As DataView Dim dSet As DataSet = New DataSet("Detail") SQL = "SELECT M_ID,M_Title,M_Detail FROM MESSAGE_TBL " dAdp = New OleDb.OleDbDataAdapter(SQL, Cn) dAdp.Fill(dSet, "Detail") dView = New DataView(dSet.Tables("Detail"), "", "", DataViewRowState.CurrentRows) DataGridView1.DataSource = dView M_ID : 数値型、M_Title : テキスト型、M_Detail : メモ型 DataGridView1に表示されるときには、M_Detailが255文字になっています。     また、 'MessageBox.Show(Len(dSet.Tables("Detail").Rows(1)(2)))     で見たときにすでに255文字に切れていました。

  • access2010でメモ型がインポートできない

    以前のACCESS2000では出来ていたのですが、ACCESS2010(windows7)にバージョンアップしたところ、csvファイルのインポートで、メモ型のデータが255文字までしかインポートできなくなりました。 調べてみたところ、そのフィールドを、クエリなどで使用しているとキャスト(型変換)されるのでメモ型ではなくなり255文字の制限がかかる、との記述がありましたが、新しいテーブルを作成してインポートしてもできませんでしたので、別の原因かと思われます。 また、ACCESS2000のデータを、ACCESS2010の[ファイル]-[保存して発行]・・・・も行い、拡張子を.accdbにしてみましたが、やはり255文字を超えるインポートができませんでした。 インポート時の[設定]のところのフィールドの情報で、メモ型にしてあるフィールド名が表示されていないのが気になりますが。 文字列の引用符は ” にしています。 ACCESSはデータの25行目までを読み込んでデータ型を自動選択している、という記述もあり、1行目のデータに256以上の文字を入れてインポートもして見ましたが255文字で切られてしまいます。 よろしくお願いいたします。

  • アクセスからSQL Serverのデーターを更新することができない。

    アクセスのデーターをSQLサーバーへ移行する計画があり、準備のため SQL Developer バージョンで独習中です。SQLサーバーにコピーしたテーブルにアクセスからログインするとテーブルは見られるのですが、データーの変更については「このレコードセットは更新できません」と表示されます。権限の問題ではないかと思われます。 環境と現状の設定: XP Professional SQL Server 2008 Developer Visual Studio 2008  サーバー名: SVR-1 セキュリティー ログイン名: SVR-1\taro サーバーロールのメンバーシップ:sysadmin データーベース名: project ユーザー名: dbo ログイン名: SVR-1\taro 既定のスキーマ: dbo 所有されているスキーマ:なし データーベースのロールメンバーシップ: db_owner 不思議なことに、Visual Studio 2008を使って試作したデーターベースはアクセスから書き換えができます。セキュリティーの設定も何ら変わりがないのですが。 データーベース (project)のユーザー名(dbo)の「所有しているスキーマ」にあるdata_reader, data_writer欄にチェックをいれても結果は同じです。 どこをどのように設定すれば良いのか、ご教示戴きますようお願い致します。

  • ACCESS97 のモジュールの中 何番目かの データを取得したい

    ACCESS97 のモジュールの中で SQLを使用しています。 SQLを使用して あるテーブルの任意のレコードを選択したいのです。 例えば テーブルAが下記のようにあるとします。 項目 名前 番号 A 001 B 003 D 004 という場合に名前Bの番号003を取得したいのです。 データとしては、"2"番目の2 は取得可能です。  (フォーム上のテキストBOXで入力) Set DATABASE = CurrentDb() strSQL = "SELECT * FROM テーブルA WHERE " strSQL = strSQL + "**** = '" & **** & "' ;"     ↑ここに条件をどのように持てばいいのでしょうか? ※ ここで、名前の項目ではキーとなる項目は得られません。   今回は 何番目のデータを取得したい ということが可能かどうか    教えて頂きたいと思います。

  • CSVデータの加工

    CSVデータの項目数が多くアクセスで加工できません。 また データ量も多いため,一般のフリーのCSV閲覧ツールでは加工できません。 何か良い方法ないでしょうか? 項目数が600余りあります。 何番目の項目を抽出し新規ファイルに出力するようなツール無いでしょうか?

  • AccessからExcelファイルのデータ取得

    Access2000かExcelファイルのデータを取得したいのですが、 Excelファイルを一度 CSVファイルに変換し、その後Accessのテーブルへデータ取り込み といった手順をとりたいのです。 この方法って、どうコーディングすればいいのですか? (Accessのインポート処理は使用しない方法です)

  • ACCESS SQLのデータ変換。

    ACCESSのSQL、SELECT文で、 取得したデータの値に応じて別の値に設定することはできますでしょうか? 例えば、 列A 1 2 3 4 5 6 という列データをSELECT文で取得し、  値が1,2なら12を設定。  値が3,4なら34を設定。  値が5,6なら56を設定。 というように変換をかけたいのですが。 DB2ならCASE,WHEN文でできるのですが、 ACCESSで実現する方法が分かりません。 よろしくお願いいたします。

  • C♯、PostgreSQLでDB接続用クラスを作りたい。

    開発環境はC♯、DBはPostgreSQLです。 DBアクセス用に共通的に使うクラスを作りたいと思っています。 やりたいことは、 ・接続文字列はapp.configから取得 ・コネクションのプーリング(絶対ではないので出来ない、または メリットがないのであればやらなくても構わない) 以下、途中ですが、書いてみたソースです。 --------ここから using System; using System.Data; using System.Configuration; using System.Collections.Generic; using System.Data.Common; using System.Text; using System.Data.OleDb; namespace InventoryMngProtoType { class DataBaseAccess { //グローバル変数 string connectString; //DB接続用共通クラス //DataReader、DataSet… public DataBaseAccess() { //接続文字列等設定 connectString = System.Configuration.ConfigurationManager.ConnectionStrings["DatabaseConnection"].ConnectionString; OleDbConnection con = new OleDbConnection(connectString); //コネクションオープン if (con.State == ConnectionState.Closed) { con.Open(); } } public DataSet Getdataset(string sql) { System.Data.DataSet ds = default(System.Data.DataSet); //パラメタのSQLを投げ、データを取得、DataSetで返す。 System.Data.OleDb.OleDbDataAdapter MyCommand; MyCommand = new System.Data.OleDb.OleDbDataAdapter(sql, connectString); ds = new System.Data.DataSet(); MyCommand.Fill(ds); return ds; } } } --------ここまで --appconfigの内容 <?xml version="1.0" encoding="utf-8" ?> <configuration> <connectionStrings> <add name="DatabaseConnection" connectionString="Data Source=localhost" providerName=" PostgreSQL OLE DB " /> </connectionStrings> </configuration> -- まずはSQLをDataSetで返すメソッドから作ろうとしています。 コンストラクタでコネクションを開いておいて、Dispose用の メソッドを用意して、そこで閉じるような作りを考えています。 しかし、 >MyCommand = new System.Data.OleDb.OleDbDataAdapter(sql, connectString); ここで接続文字列が第二引数として必要なようなので、結局、 ここでもコネクションを開くことになるのでしょうか? C♯に慣れていないため、全般、作りについてアドバイス いただけたらと思います。 よろしくお願いします。

  • AccessのデータをOracleに移行したい

    AccessのデータをExcel(csv)にエクスポートして、それをSQL Loderでオラクルに移せると聞いたのですが、 具体的にはどんな感じで行うのでしょうか? Access2000 Oracle9i RedHatLinux7.2 です。 よろしくお願いします。

専門家に質問してみよう