2011-09-09 51 views
0

我有一個wcf 4服務,試圖將記錄添加到同一臺服務器上的Visual Fox Pro dbf文件。當它嘗試執行插入時,我得到「無法更新遊標USER,因爲它是隻讀的。」wcf服務無法更新dbf文件 - 「只讀」錯誤

我假設這是一個權限問題。我必須做什麼才能授予wcf服務更新我的dbf文件?

這適用於我的開發機器。

下面是一些代碼:

OleDbConnection oConn = new OleDbConnection("provider=vfpoledb;Data Source="\\data\\tt.dbc"); 
      oConn.Open(); 
OleDbCommand oCommand = new OleDbCommand(); 
        oCommand.Connection = oConn; 
        oCommand.CommandText = "SET NULL OFF\r\nSET DELETED ON"; 
        oCommand.ExecuteNonQuery(); 

OleDbCommand mycmd = new OleDbCommand("insert into user (lastname,firstname) values ('Doe','John')", oConn); 
      mycmd.CommandType = CommandType.Text; 

         lnRet = mycmd.ExecuteNonQuery(); 

回答

0

這不是一個權限問題 - 這將產生一個拒絕訪問錯誤。

兩件事情來檢查:

  1. 是將文件標記爲只讀?

  2. 該文件是否被其他進程使用?

我認爲#2是更容易 - 我沒有做過的FoxPro,但我已經做了很多的dBase與快船,至少下的dBase文件必須以獨佔方式打開(即不共享)做插入/更新/刪除。

+0

我有很多dbfs的經驗 - 並且從來沒有需要專門打開一個文件來更新它。也許有使用vfpoledb的問題? – ygreenstein

+0

正如我所提到的,在我的開發機器上的類似情況下,它工作正常。 – ygreenstein

+0

它可能與vfpoledb - 我沒有使用特定的驅動程序。我還沒有通過任何種類的OleDb來更新DBF,所以也許獨佔它並不是OleDb的問題;它正在通過Clipper。 – Tim

0

您需要驗證用於運行WCF服務的憑據是否具有對數據UNC路徑的讀取/寫入訪問權限。

+0

謝謝。我如何確定哪些憑證用於運行WCF服務? – ygreenstein

+0

如果您的WCF服務託管在IIS中,則可以檢查應用程序池憑據。否則,您可以通過在任務管理器中查找進程來查看憑證。 –

+0

謝謝 - 這解決了問題! – ygreenstein