需要将新的空白记录(行)插入现有的DBF文件(dbase III格式)

时间:2019-04-26 14:20:32

标签: c# insert record dbf

我正在编写必须满足以下条件的应用程序: a。)打开一个现有的DBF文件,然后, b。)添加一个新的空记录(行),然后 c。)将一些数据添加到新记录中的一个或多个字段中, d。)关闭DBF文件

我已经有了可以打开和读取dbf文件并在datagridview中显示内容的代码。那很好。但是我现在已经搜索了3天,每天要花几个小时,却找不到任何有关如何简单添加单个空白记录的指导或示例。

注意:新记录应该只是添加到现有文件上的新的空记录(该文件由另一个应用程序自动创建-因此所有列均已建立,不需要由我的应用程序定义)

这是我用来打开和读取表,然后计算行数的代码。

OleDbConnection oConn = new OleDbConnection(
        "Provider=VFPOLEDB.1;SourceType=DBF;Data Source=.\\;");
oConn.Open();
System.Data.OleDb.OleDbCommand oCmd = oConn.CreateCommand();

string dbname = "SELECT * FROM C:\\rmwin\\poslink.dbf";

oCmd.CommandText = dbname;

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

oConn.Close();
dg1.DataSource = emp; 
int rowcount = emp.Rows.Count;

数据正确显示在dg1(我的datagridview控件)中,所以现在我想要将其简单地添加到POSLINK.DBF的新记录。 任何指导将不胜感激。

1 个答案:

答案 0 :(得分:1)

One sample showing SQL Update, but the principles are the same

首先,您的OleDb连接源应指向数据所在的路径,而不仅仅是指向。\的相对路径,这可能并不总是一个好的选择。然后,所有关于插入,更新,删除的查询都可以在该文件夹中进行,因此您不必明确所有路径。只是表名。

 OleDbConnection oConn = new OleDbConnection(
            "Provider=VFPOLEDB.1;SourceType=DBF;Data Source=C:\\rmwin\\;");

现在,您的命令。要添加,更新和删除,可以使用相对常见的sql语句。但是,请勿串联您尝试插入或更新的值,这会使您暴露于SQL注入中。而是,OleDb使用“?”字符作为添加到命令的参数的占位符,以及所有“?”需要以相同顺序添加参数。

因此,要进行选择,请立即开始

System.Data.OleDb.OleDbCommand oCmd = oConn.CreateCommand();
oCmd.CommandText = "select * from PosLink";

要进行插入,请构建命令,确定要尝试插入的所有字段...显然不知道表的内容

oCmd.CommandText = 
@"insert into PosLink
   ( TryColumn1,
     TryColumn2,
     TryColumn3 )
   values
   ( ?,
     ?,
     ? ) ";

现在,添加来自屏幕/源代码的任何地方的参数

oCmd.Parameters.AddWithValue( "parmTryColumn1", yourCSharpClassOrPropertyStringField );
oCmd.Parameters.AddWithValue( "parmTryColumn2", DateTime.Now );
oCmd.Parameters.AddWithValue( "parmTryColumn3", 12345 );

请注意,我以“ parm”为前缀的参数命名只是为了知道其参数而不是插入的实际列。它们的顺序必须与插入顺序相同。

然后您可以执行它...由于它是INSERT,因此不会返回任何内容,因此被视为非查询,但是将返回受影响的记录数的计数...如果一切正常,则期望1,0否则为否。

   var recordCountInserted = oCmd.ExecuteNonQuery();

希望这可以帮助您入门并按自己的方式进行。

至于附加空白,需要脚本。在VFP中,您将执行以下操作

use SomeTable
append blank

因此,为这些命令构建一个字符串(VfpOleDb并不支持所有命令,但最常见的是您希望数据,日期,字符串,常用功能都起作用)

oCmd.CommandText = 
@"execScript('use SomeTable
append blank
use' )";

oCmd.ExecuteNonQuery();

是的,您可以像这样执行VFP代码,但不允许所有操作

Many other links from my history posting for VFP, OleDb, parameterized queries, etc. There are also other strong VFP developers in this community too.