为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
Cats萌萌 2022-12-31 13:39:03
我正在编写一个应用程序,它必须: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 回答

?
慕森王

TA贡献1777条经验 获得超3个赞

一个示例显示了 SQL 更新,但原理是相同的

首先,您的 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 代码,但并非所有内容都是允许的


我的 VFP、OleDb、参数化查询等历史帖子中的许多其他链接。这个社区中还有其他强大的 VFP 开发人员。


查看完整回答
反对 回复 2022-12-31
  • 1 回答
  • 0 关注
  • 198 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号