我想帮忙。但是,我还是坚持使用 OLEDB for VPF 的简单流程。
创建表 DBF
这可能是您为 .DBF 创建表的脚本
CREATE TABLE "C:\test.dbf" ([ID] Numeric(18,0), [Name] Char(100) NULL, [Details] Char(200) NULL, [Status] Logical NULL, [CreateDate] DATETIME NULL)
然后,您可以从 OLE DB 脚本中调用它,如下所示。
string vpfScript = "CREATE TABLE \"C:\test.dbf\" ([ID] Numeric(18,0), [Name] Char(100) NULL, [Details] Char(200) NULL, [Status] Logical NULL, [CreateDate] DATETIME NULL)";
string connectionString = @"Provider=VFPOLEDB.1;Data Source=C:\test.dbf";
OleDbConnection connection = new OleDbConnection(connectionString);
using (OleDbCommand scriptCommand = connection.CreateCommand())
{
connection.Open();
scriptCommand.CommandType = CommandType.StoredProcedure;
scriptCommand.CommandText = "ExecScript";
scriptCommand.Parameters.Add("myScript", OleDbType.Char).Value = vfpScript;
scriptCommand.ExecuteNonQuery();
}
在表格中导入行
要在 DBF 表中导入行,它不像我们在其他 DB 中执行的常用 SQL 脚本。
string vpfScript = "INSERT INTO \"C:\test.dbf\" ([ID], [Name], [Details], [Status], [CreateDate]) VALUES (1,'test john','test details',.t.,{^2015-09-15)";
string connectionString = @"Provider=VFPOLEDB.1;Data Source=C:\test.dbf";
OleDbConnection connection = new OleDbConnection(connectionString);
using (OleDbCommand scriptCommand = connection.CreateCommand())
{
connection.Open();
scriptCommand.CommandType = CommandType.StoredProcedure;
scriptCommand.CommandText = "ExecScript";
scriptCommand.Parameters.Add("myScript", OleDbType.Char).Value = vfpScript;
scriptCommand.ExecuteNonQuery();
}
您现在可以更改适合您需要的值,就像下面的用法一样。
DataTable dt = new DataTable(); // assuming this is already populated from your SQL Database.
StringBuilder buildInsert = new StringBuilder();
string connectionString = @"Provider=VFPOLEDB.1;Data Source=C:\test.dbf";
OleDbConnection connection = new OleDbConnection(connectionString);
using (OleDbCommand scriptCommand = connection.CreateCommand())
{
connection.Open();
foreach(DataRow dr in dt.Rows)
{
string id = dr["ID"].ToString();
string name = dr["Name"].ToString();
string details = dr["Details"].ToString();
string status = Convert.ToBoolean(dr["Status"]) ? ".t." : ".f.";
string createDate = "{^" + Convert.ToDateTime(dr["CreateDate"]).ToString("yyyy-MM-dd") + "}";
builderInsert.Append("INSERT INTO \"C:\test.dbf\" ([ID], [Name], [Details], [Status], [CreateDate]) VALUES (" + id + ",\"" + name + "\",\"" + details + "\"," + status + "," + createDate + ")" + Environment.NewLine);
scriptCommand.CommandType = CommandType.StoredProcedure;
scriptCommand.CommandText = "ExecScript";
scriptCommand.Parameters.Add("myScript", OleDbType.Char).Value = builderInsert;
scriptCommand.ExecuteNonQuery();
builderInsert = "";
}
}
如果您还有其他问题,请告诉我。
不要忘记在你的机器上安装这个。
VFP OLE DB