如何连接到这些数据库(DBF,FPT)源?

时间:2014-08-01 14:53:38

标签: dbf

软件使用DBF和FPT文件来管理其数据。我不熟悉这些类型的数据库或数据存储。我能够使用一些PHP类检索数据。但是我需要帮助以更好的方式连接到这个数据库,以便我可以有效地自动导出数据。

这些文件可以像数据库一样对待,以便我可以使用其他编程语言连接,选择和过滤数据吗?这些数据源是否可能被使用它们的软件加密和保护(我的意思是那时我无法连接它们)?

我可以使用.NET连接到这些数据库或数据,还是可以以某种方式运行SQL以便我可以快速导出数据?因为当我使用PHP读取这些文件时,我不得不阅读整个文件,这需要花费很多时间。但是使用文件作为数据源的软件可以从软件的前端快速导出数据。我需要一些指南来开始使用这些数据源。

3 个答案:

答案 0 :(得分:0)

您可以使用ODBC使用.NET读取dbf文件:

private void ConnectToDBF()
{            
    System.Data.Odbc.OdbcConnection oConn = new System.Data.Odbc.OdbcConnection();
    oConn.ConnectionString = @"Driver={Microsoft dBase Driver (*.dbf)};SourceType=DBF;SourceDB=D:\databases\;Exclusive=No; Collate=Machine;NULL=NO;DELETED=NO;BACKGROUNDFETCH=NO;";
    oConn.Open();
    System.Data.Odbc.OdbcCommand oCmd = oConn.CreateCommand();

    // Read the table
    oCmd.CommandText = @"SELECT * FROM C:\dbf\test.dbf";

    DataTable dt = new DataTable();
    dt.Load(oCmd.ExecuteReader());

    oConn.Close();
    dataGridView1.DataSource = dt;
}

答案 1 :(得分:0)

首先,.dbf和.fpt与VFP(Visual FoxPro)相关联。正如你提到的PHP(vs C#),我快速搜索了" vfp php"并有一堆命中让你运行。但是,我认为第一个好的启动是

this one showing multiple ways to query

无论您发现/喜欢哪种方法,请务必保持查询清洁,参数化并帮助防止SQL注入。

由于你选择使用VB.Net(而不是每个问题的PHP),我对C#.net更熟悉,但同样适用。

string sqlStatement = "select * from someTable where someKey = ?";
OleDbCommand oCmd = new OleDbCommand( sqlStatement );
oCmd.Parameters.Add( "someParmKey", someIntegerValueForExample );

"?someParmKey"在SQL语句中。 "?"代表查询中的PLACE-HOLDER,.Parametres.Add()必须与查询布局的顺序相同。所以如果你有一个查询3"?"占位符,请确保.Parameters.Add()的顺序与参数的上下文相同。

HTH

答案 2 :(得分:0)

首先,感谢已经回答过问题的其他人。除了这些有用的答案,我发现以下定义非常有用,它取自this source(click here),然后我能够快速实现VB解决方案。

  

“FoxPro表分为3部分:DBF是主表,FPT   (可选)是备注字段的内容,CDX(也是可选的)   是关联的索引文件。所有这三个通常都命名为   除了扩展名以外,如果你的表有备注字段和   索引然后必须存在FPT和CDX。

     

Fox桌有两种组织方式。首先,有“免费”   表。使用空闲表时,不存在DBC文件和连接   string应该只引用找到文件的目录,   正如你在下面所做的那样。

     

其次,Fox表可以与“数据库容器”(DBC,   DCT备忘录和DCX索引文件),其中包含有关的元数据   表和其他功能,如存储过程和触发器。如果一个   DBC存在连接字符串中的路径应该是什么   比如“C:\ ESS2001 \ DATA \ Whatever.dbc”。“

我的最终工作代码:

    Dim ConnectionString As String = "Provider=VFPOLEDB.1;Data Source=\\data source;User ID=ADMIN"

    Dim con As New OleDb.OleDbConnection
    Dim com As New OleDb.OleDbCommand
    con.ConnectionString = "Provider=VFPOLEDB.1;Data Source=\\folder location of database;User ID=test"
    con.Open()

    Dim dBaseCommand As New System.Data.OleDb.OleDbCommand("SELECT * FROM inventory", con)
    Dim dBaseDataReader As System.Data.OleDb.OleDbDataReader = dBaseCommand.ExecuteReader(CommandBehavior.SequentialAccess)

    Dim partnumber As String
    Dim qty As String
    Dim unitcost As String
    Dim description As String
    Dim mfgr As String

    While dBaseDataReader.Read
        partnumber = dBaseDataReader("ITEMNUMBER")
        mfgr = dBaseDataReader("MFGR")
        qty = dBaseDataReader("QTY")
        unitcost = dBaseDataReader("UNITCOST")
        description = dBaseDataReader("DESCRIPTION")

        Out.WriteLine("""" & partnumber & """,""" & unitcost & """,""" & qty & """,""" & description & """,""" & mfgr & """")
    End While

    status.Text = "Complete"
    Me.Close()