FoxProテーブルにBLOBとして格納されているファイルを抽出するにはどうすればよいですか?

いくつかのFoxproテーブルがあり、そのうちの1つにBlobフィールドが含まれています。私はBlob(MapPointファイル)内に格納されているデータ型を知っていますが、私はFoxProを持っていないので、それを抽出する方法はありません(簡単に取得できません)。

.DBFと.FPTファイルを取得し、内部に格納されているMapPointファイルを抽出する方法はありますか?

1

3 答え

C#とADO.NETを使用して、データをファイルに抽出することができます。ここにいくつかのサンプルコードがあります:

using System;
using System.Data;
using System.Data.OleDb;
using System.IO;

namespace SaveFoxProMemoFieldAsFile
{
    class Program
    {
        static void Main(string[] args)
        {
            string connectionString = @"Provider=VFPOLEDB.1;Data Source=C:\data\;Collating Sequence=MACHINE;Null=Yes";

            string sqlSelect = "SELECT filedata FROM filelist";
            int fileNumber = 1;
            using (OleDbConnection connection = new OleDbConnection(connectionString))
            {
                using(OleDbCommand command = connection.CreateCommand())
                {
                    command.CommandText = sqlSelect;
                    command.CommandType = CommandType.Text;

                    try
                    {
                        connection.Open();
                        using(OleDbDataReader reader = command.ExecuteReader(CommandBehavior.CloseConnection))
                        {
                            if(reader.HasRows)
                            {
                                while(reader.Read())
                                {
                                    byte[] binaryData = (byte[])reader["filedata"];

                                    FileStream fs = new FileStream(string.Format(@"C:\data\file_{0}.pdf", fileNumber++), FileMode.OpenOrCreate, FileAccess.Write);
                                    fs.Write(binaryData, 0, binaryData.Length);
                                    fs.Close();
                                }
                            }
                        }
                    }
                    catch
                    {
                        throw;
                    }
                }
            }

            Console.WriteLine("Program execution complete");
            Console.WriteLine("Press any key to end");
            Console.ReadKey();
        }
    }
}

必要な場合は、 Microsoft OLE DBプロバイダfor Visual FoxPro 9.0 にアクセスしてください。 FoxProドライバ。

1
追加された

This previous link shows how to connect to VFP from C#. That answer actually shows connection with OleDbProvider which is similar to answer by DaveB, however, VFP is NOT SQLServer connection and uses VFP OleDbProvider which is available at Microsoft's website for VFP

相互に関連して(VFP OleDBに接続)、実行中のクエリで使用されます。接続文字列は、データが存在する物理パスを指すだけで、そのフォルダ内の.dbfからクエリできます。 VFPはパスがデータベースの場所であることを意味するため、実際の「データベース」に明示的に接続する必要はありません。

とにかく、Daveに加わったもう1つの質問は、あなたのデータを入手してストリームに書き込むことができるはずです。唯一の注意点は、あなたが書いているファイルストリームもバイナリファイルであることです。それ以外の場合は、{enter}キーであるバイトを書き込むときはいつでも、末尾の{改行}で強制的に書き込まれる可能性があります。私は2dバーコードをビルドするときにバイナリイメージファイルを書き込むのが難しい方法だと気づきました。

0
追加された

私はFoxProのメモ欄と思われるものに格納されていたいくつかのPDFファイルを取り出す必要がありました。スキーマはフィールドを LONGVARCHAR としてリストしました。

私は提供されたソースコードを使用することができましたが、SQLを変更する必要があったか、キャストエラーが発生しました。

PDFファイルを文字列として取り出すと、BLOBの NULL \ 0 の値に達したときに切り捨てられます。

使用しているSQLは次のとおりです。

string sqlSelect = "SELECT cast(inc_rawdata as Blob) as inc_rawdata, inc_filename  FROM F2_522_SYS_MAP_FILES";
0
追加された