亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

需要將新的空白記錄(行)插入現有的 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 關注
  • 172 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號