2011-02-08 29 views
9

Tôi đang cố viết một tệp DBF từ đầu trong chương trình của mình. Tôi muốn tạo nó, thêm một số cột, và sau đó thêm dữ liệu vào cột X số lần. Chương trình của tôi sẽ không cần phải đọc lại nó, nhưng các chương trình khác sẽ.Cách tạo tệp DBF từ đầu trong C#?

Tôi đã xem xét một giải pháp cho điều này, nhưng tất cả dường như giả định một tệp DBF hiện có, trong khi tôi muốn tạo một tệp mới.

Mục đích của việc này là làm cho phần DBF của một tệp hình dạng ESRI.

Có ai biết cách thực hiện việc này không?

+0

Tùy chọn duy nhất tôi thấy là phát lệnh 'create table' trực tiếp bằng cách sử dụng nhà cung cấp vfpoledb. Nó cồng kềnh, nhưng nó có thể hoạt động. – alex

+0

Tôi vừa phát hiện ra bạn cần tệp DBF ở định dạng ** dBase IV ** vì vậy tôi đã chỉnh sửa câu trả lời của mình. Hãy thử nó, nó sẽ làm việc với GIS (không chắc chắn nếu bạn mở nó với MS Access, mặc dù). –

Trả lời

9

Tải Microsoft OLE DB Provider for Visual FoxPro 9.0 và sử dụng:

string connectionString = @"Provider=VFPOLEDB.1;Data Source=D:\temp"; 
using (OleDbConnection connection = new OleDbConnection(connectionString)) 
using (OleDbCommand command = connection.CreateCommand()) 
{ 
    connection.Open(); 

    OleDbParameter script = new OleDbParameter("script", @"CREATE TABLE Test (Id I, Changed D, Name C(100))"); 

    command.CommandType = CommandType.StoredProcedure; 
    command.CommandText = "ExecScript"; 
    command.Parameters.Add(script); 
    command.ExecuteNonQuery(); 
} 

Sửa: Các OP không muốn có một định dạng FoxPro DBF nhưng dBase IV Định dạng:

string connectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\temp;Extended Properties=dBase IV"; 

using (OleDbConnection connection = new OleDbConnection(connectionString)) 
using (OleDbCommand command = connection.CreateCommand()) 
{ 
    connection.Open(); 

    command.CommandText = "CREATE TABLE Test (Id Integer, Changed Double, Name Text)"; 
    command.ExecuteNonQuery(); 
} 
+0

Làm thế nào để bạn hình dung rằng "Nhà cung cấp Microsoft OLE DB cho Visual FoxPro 9.0" được xây dựng trong Khuôn khổ .NET? Đó không phải là xây dựng trong hơn đề nghị của tôi để sử dụng Microsoft Excel để làm việc nâng hạng nặng. (Nhưng có, +1, vẫn là một gợi ý tốt hơn tôi.) –

+0

Lưu ý: Lệnh 'ExecScript' có thể được sử dụng để sao chép tệp bảng sang các định dạng khác. @Cody: Cảm ơn bạn. Vâng, giao diện được tích hợp sẵn, nhà cung cấp có thể không. Chúng tôi đã cài đặt sẵn, tôi đã thêm liên kết tải xuống. –

+0

Cảm ơn. Tôi đã thử điều này nhưng khi tôi cố gắng và mở nó trong Access nó nói "Bảng bên ngoài không ở định dạng mong đợi." Bất kỳ ý tưởng? – Greg

1

Nếu bạn muốn loại bỏ hoàn toàn các phụ thuộc bên ngoài, bạn sẽ phải sử dụng để tạo tệp theo cách thủ công. Và để làm được điều đó, bạn sẽ cần phải dành một chút thời gian chất lượng với báo cáo mô tả các đặc tả của định dạng tệp để hiểu các trường bạn cần triển khai và những gì chúng cần chứa. Bạn có thể tìm thấy trực tuyến tại đây: http://www.esri.com/library/whitepapers/pdfs/shapefile.pdf

Tất nhiên, đây không thực sự là một cam kết cho trái tim yếu ớt. Hãy chắc chắn rằng bạn hiểu được công việc được đưa vào đây trước khi bắt tay vào hành trình.

+0

-1: thực sự có hỗ trợ cho nó. –

+0

@Jaroslav: Chúng tôi lo lắng đang chờ đợi câu trả lời sắp xảy ra của bạn ngược lại. –

+0

Tôi đã xóa -1. –

2

Tôi không biết gì về ESRI ShapeFile ... nhưng bạn có thể tạo một dbf bằng OleDb.

Dưới đây là một ví dụ sử dụng các nhà cung cấp VFP OleDb:

string dbfDirectory = @"c:\"; 
    string connectionString = "Provider=VFPOLEDB;Data Source=" + dbfDirectory; 
    using (OleDbConnection connection = new OleDbConnection(connectionString)) { 
     connection.Open(); 
     OleDbCommand command = connection.CreateCommand(); 

     command.CommandText = "create table Customer(CustId int, CustName v(250))"; 
     command.ExecuteNonQuery(); 
     connection.Close(); 
    } 
Các vấn đề liên quan