2011-11-24 2 views

답변

1

C# 및 ADO.NET을 사용하여 데이터를 파일로 추출 할 수 있습니다. 당신이 FoxPro에 드라이버를 필요로하는 경우

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 Provider for Visual FoxPro 9.0 : 여기에 몇 가지 예제 코드입니다.

0

이 이전 링크는 연결하는 방법을 보여줍니다. to VFP from C#. 이 대답은 실제로 DaveB의 대답과 비슷한 OleDbProvider와의 연결을 보여줍니다. 그러나 VFP는 SQLServer 연결이 아니며 VFP OleDbProvider를 사용할 수 있습니다. Microsoft's website for VFP

VFP OleDB에 연결하고 쿼리를 실행하는 데 함께 사용됩니다. . 연결 문자열은 데이터가 상주하는 실제 경로를 가리키고 해당 폴더의 .dbf에서 쿼리 할 수 ​​있습니다. VFP는 경로가 데이터베이스 위치임을 의미하므로 실제 "데이터베이스"에 명시 적으로 연결할 필요가 없습니다.

아무리해도 Dave와 합병 한 다른 질문은 데이터를 가져 와서 스트림에 쓸 수 있어야합니다. 유일한 다른주의 사항은 작성중인 파일 스트림이 바이너리 파일인지 확인하는 것입니다. 그렇지 않으면 {enter} 키 인 바이트를 쓸 때마다 후행 {줄 바꿈}으로 강제 작성 될 수 있습니다. 오래 전에 2d 바코드를 작성할 때 바이너리 이미지 파일을 작성하기가 힘들었고 엉망이되었습니다.

0

나는 FoxPro의 메모 필드라고 생각하는 곳에 저장되어 있던 일부 PDF 파일을 가져와야했습니다. 스키마는 필드를 LONGVARCHAR으로 나열했습니다.

제공된 소스 코드를 사용할 수 있었지만 SQL을 변경해야했거나 캐스팅 오류가 발생했습니다.

PDF 파일을 문자열로 가져온 경우 BLOB에 NULL \0 값이있을 때마다 잘립니다.

string sqlSelect = "SELECT cast(inc_rawdata as Blob) as inc_rawdata, inc_filename FROM F2_522_SYS_MAP_FILES"; 
: 여기

내가 사용하는 SQL입니다
관련 문제