Foxproテーブルがいくつかあり、そのうちの1つにBlobフィールドが含まれています。Blob(MapPointファイル)に格納されているデータ型は知っていますが、FoxProを持っていないため(簡単に取得できないため)、データ型を抽出する方法がわかりません。
.DBFファイルと.FPTファイルを取得して、その中に保存されているMapPointファイルを抽出する方法はありますか?
Foxproテーブルがいくつかあり、そのうちの1つにBlobフィールドが含まれています。Blob(MapPointファイル)に格納されているデータ型は知っていますが、FoxProを持っていないため(簡単に取得できないため)、データ型を抽出する方法がわかりません。
.DBFファイルと.FPTファイルを取得して、その中に保存されているMapPointファイルを抽出する方法はありますか?
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();
}
}
}
FoxPro ドライバーが必要な場合は、Microsoft OLE DB Provider for Visual FoxPro 9.0 にアクセスしてください。
FoxPro のメモ フィールドと思われる場所に保存されていた PDF ファイルをいくつか取り出す必要がありました。スキーマは、フィールドを としてリストしましたLONGVARCHAR
。
提供されたソース コードを使用できましたが、SQL を変更する必要がありました。そうしないと、キャスト エラーが発生しました。
PDF ファイルを文字列として取り出したNULL \0
場合、BLOB 内の値に遭遇するたびに切り捨てられます。
使用したSQLは次のとおりです。
string sqlSelect = "SELECT cast(inc_rawdata as Blob) as inc_rawdata, inc_filename FROM F2_522_SYS_MAP_FILES";