Как я могу извлечь файл, хранящийся в виде BLOB в таблице FoxPro? - PullRequest
1 голос
/ 24 ноября 2011

У меня есть несколько таблиц Foxpro, одна из которых включает поле Blob.Я знаю тип данных, хранящихся в BLOB-объекте (файл MapPoint), но я не знаю, как его извлечь, потому что у меня нет FoxPro (не могу ли я легко получить его).

Есть лиспособ взять файлы .DBF и .FPT и извлечь файлы MapPoint, хранящиеся в?

Ответы [ 3 ]

1 голос
/ 25 ноября 2011

Вы можете использовать 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 для Visual FoxPro 9.0 , если вам нужен драйвер FoxPro.

0 голосов
/ 11 сентября 2017

Мне нужно было вытащить несколько файлов 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";
0 голосов
/ 25 ноября 2011

Эта предыдущая ссылка показывает, как подключить к VFP из C # .Этот ответ фактически показывает соединение с OleDbProvider, которое аналогично ответу DaveB, однако VFP НЕ является соединением SQLServer и использует VFP OleDbProvider, который доступен на веб-сайте Microsoft для VFP

Используется в сочетании сдруг друга (подключение к VFP OleDB) и выполнение запроса.Строка подключения должна указывать только на физический путь, в котором находятся данные, и может запрашивать любой файл .dbf в этой папке.Вам не нужно явно подключаться к фактической «базе данных», поскольку VFP подразумевает, что путь - это местоположение базы данных.

В любом случае, другой вопрос, связанный с Дейвом, должен быть в состоянии получить ваши данные и написатьэто в поток.Единственное другое предостережение в том, что поток файлов, который вы пишете, также должен быть двоичным файлом.В противном случае, всякий раз, когда вы пишете байт, который является ключом {enter}, может быть принудительно записан с завершающим {переводом строки}.Я обнаружил, что один трудный путь давным-давно писал двоичные файлы изображений при создании 2-х штрих-кодов, и это испортилось.

...