软件使用DBF和FPT文件来管理其数据。我不熟悉这些类型的数据库或数据存储。我能够使用一些PHP类检索数据。但是我需要帮助以更好的方式连接到这个数据库,以便我可以有效地自动导出数据。
这些文件可以像数据库一样对待,以便我可以使用其他编程语言连接,选择和过滤数据吗?这些数据源是否可能被使用它们的软件加密和保护(我的意思是那时我无法连接它们)?
我可以使用.NET连接到这些数据库或数据,还是可以以某种方式运行SQL以便我可以快速导出数据?因为当我使用PHP读取这些文件时,我不得不阅读整个文件,这需要花费很多时间。但是使用文件作为数据源的软件可以从软件的前端快速导出数据。我需要一些指南来开始使用这些数据源。
答案 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()