我有一些Foxpro表,其中一个包含Blob字段。我知道存储在Blob(MapPoint文件)中的数据类型,但我不知道如何提取它,因为我没有FoxPro(我不能轻易获得它)。
有没有办法获取.DBF和.FPT文件并提取存储在其中的MapPoint文件?
答案 0 :(得分:1)
您可以使用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。
答案 1 :(得分:0)
此前一个链接显示了如何连接 to VFP from C#。这个答案实际上显示了与OleDbProvider的连接,这与DaveB的答案类似,但是,VFP不是SQLServer连接并且使用VFP OleDbProvider,Microsoft's website for VFP
彼此结合使用(连接到VFP OleDB)并运行查询。连接字符串只需指向数据所在的物理路径,并可以从该文件夹中的任何.dbf进行查询。您不必显式连接到实际的“数据库”,因为VFP暗示路径是数据库的位置。
无论如何,与Dave合作的另一个问题应该是能够获得您的数据并将其写入流。唯一的另一个警告是你正在写的文件流,确保它是一个二进制文件。否则,无论何时编写一个{enter}键的字节,都可能强制使用尾随{换行符}进行写入。很久以前,我发现在构建二维条码时编写二进制图像文件并且它变得混乱了。
答案 2 :(得分:0)
我需要提取一些PDF文件,这些文件存储在我认为是FoxPro中的备注字段中。该架构将该字段列为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";