如何在FoxPro表中提取存储为BLOB的文件?

时间:2011-11-24 18:00:51

标签: blob foxpro extraction visual-foxpro mappoint

我有一些Foxpro表,其中一个包含Blob字段。我知道存储在Blob(MapPoint文件)中的数据类型,但我不知道如何提取它,因为我没有FoxPro(我不能轻易获得它)。

有没有办法获取.DBF和.FPT文件并提取存储在其中的MapPoint文件?

3 个答案:

答案 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";