2012-04-20 42 views
0

我有一個Access表,我最近添加了一個附件字段。該表是關於每臺計算機的計算機和信息的列表。它的用戶,安裝的軟件等等。附件字段將包含從每臺計算機收到的簡單文本配置文件。C#在現有訪問數據庫上的附件字段更新

我曾與一些代碼在這裏找到:Programmatically managing Microsoft Access Attachment-typed field with .NET

我的問題是,我似乎無法更新正確的字段。意思是計算機名稱的配置文件Bob被放置在正確的字段中,但是如果這是合理的,則是錯誤的計算機。以下是一個SQL語句示例。

Select * From MyTable WHERE ComputerName Like 'Bob' 

根據要求整個代碼段。

public void InsertFile(String Path, String CmpName) 
{ 
    DBEngine dbe = new DBEngine(); 
    Database db = dbe.OpenDatabase("MyAccessDB.accdb", false, false, ""); 
    Recordset rs = db.OpenRecordset(
     "SELECT * FROM MyTable WHERE ComputerName LIKE '" + CmpName + "\'", 
     RecordsetTypeEnum.dbOpenDynaset, 0, LockTypeEnum.dbOptimistic); 
    rs.MoveFirst(); 
    rs.Edit(); 
    Recordset2 rs2 = (Recordset2)rs.Fields["My_File"].Value; 
    rs2.AddNew(); 
    Field2 f2 = (Field2)rs2.Fields["FileData"]; 
    f2.LoadFromFile(Path); 

    rs2._30_Update(); 
    rs2.Close(); 
    rs._30_Update(); 
    rs.Close();   
} 

我希望使用OpenRecodeset()時,上面的語句會給我只是行,那麼唯一的附件欄該行。然而,這種情況並非如此。我已經搜索瞭解如何迭代記錄集以找到沒有運氣的正確行。我在這裏是新的,所以我希望我涵蓋了我需要的一切。

+0

你可以圍繞該語句顯示代碼嗎? – Steve 2012-04-20 19:49:23

回答

0

我不知道如果我理解你的問題,但如果你想要的是附件字段中輸入您的SQL查詢應該是:

"SELECT attachment FROM MyTable WHERE UCASE(ComputerName) = 'BOB'" 
+0

非常感謝你的工作。 – Enonra 2012-04-23 13:02:34

+0

不客氣。我通常在SQL中遠離LIKE,因爲它在數據庫引擎中的行爲不同。最簡單的方法是將兩個字符串轉換爲大寫,然後運行比較。 – 2012-04-23 15:05:27

0

。注意where子句WHERE ComputerName Like 'Bob'將只有在可靠地工作字段ComputerName可能是主鍵字段,或者您有定義的唯一索引。

在任何情況下,您應該定義一個主鍵,這可以確保可靠地識別要更新的表記錄。


UPDATE

不要使用LIKE比較,如果ComputerName是主鍵,使用=代替。

SELECT attachment FROM MyTable WHERE ComputerName = 'Bob' 
+0

ComputerName字段是主鍵,謝謝。 – Enonra 2012-04-20 20:00:46