2013-04-22 59 views
1

我有一個與Visual FoxPro中的dbf操作相關的代碼,如下所示。我們如何將DBF相關代碼遷移到C#.NET?

SELECT 3 
USE student shared 

SET FILTER TO 

LOCATE FOR id=thisform.txtStudentID.Value 

任何一個可以幫助我瞭解的代碼的每一行,並轉換爲C#.net.What都是要考慮到FoxPro代碼轉換爲C#中的步驟?在這裏,我使用SQL Server作爲後端在C#Project.Some次我都面臨着以下類型的代碼也

Use Student Shared 

//這裏訪問數據庫中的字段directly.Here他們是靶向得到像所有記錄「選擇*從學生「或只有最後一個記錄。默認情況下,這個學生表有6列,但在dbf文件中,我們有12列。在C#.NET中如何做到這一點?

+0

在上面的問題中,您不會告訴我們您想要定位的數據庫。你是想要從C#中與FoxPro DB交談,還是要將數據庫導出到某種形式的基於SQL的數據庫? – 2013-04-22 18:04:04

+0

lang ref:http://msdn.microsoft.com/en-us/library/dd5f4hyy%28v=vs.80%29.aspx – 2013-04-22 18:14:11

+0

我相信有一個[用於ADO.NET的FoxPro數據驅動程序](http:///msdn.microsoft.com/en-us/library/aa977092(v=vs.71).aspx),以便您可以通過C#使用ADO.NET將命令直接傳遞到數據庫。不需要轉換。 – Icemanind 2013-04-23 01:32:50

回答

1

要回答你的問題的一部分 - 這個代碼做什麼呢?

下集的工作區(我沒有做過的FoxPro了幾年了,但認爲這是在後來的冗餘VFP版本)。工作區域只是記憶中的一個空間,與其他工作空間隔開。

Select 3 

下打開一個名爲「學生」非只讀訪問到以前打開的工作空間(表

USE student shared 

下清除表中的所有過濾器,所以如果你「瀏覽」你會得到所有記錄)

SET FILTER TO 

下面將記錄指針設置爲特定的記錄,其中有一個ID的記錄等於txtStudentID文本框的值當前表單上(FoxPro中不是一個強類型語言)

LOCATE FOR id=thisform.txtStudentID.Value 

對於你的問題的第二部分,還有就是FoxPro和C#應用程序之間進行轉換的直接方式。要點是Foxpro是圍繞數據庫構建的,而不是強類型的,而c#是強類型的並且可以訪問數據庫。如果你做一個快速的谷歌搜索,你可能會找到像Markus Egger這樣的人編寫的工具,將它從foxpro轉換爲c#。

恕我直言,從企業規模的系統從VFP遷移到c#/ SQL服務器的經驗 - 如果你想用系統做到這一點 - 停止,說服自己這是一個壞主意,只是重新寫在C# - 選擇最適合您需求的數據庫。

這很難進一步評論 - 你還沒有說明你使用的是什麼版本的foxpro - 你使用的是foxpro還是visual foxpro?您的應用程序的大小是多少?背景是什麼?

HTH 周杰倫

+0

Jay - 字符串和整數之間的轉換不會發生在幕後。是的,將其重新寫入另一種技術是絕對要走的路,但有時必須有一個過渡階段,技術可能需要訪問DBF數據。 – 2013-04-22 20:45:16

+0

有時候我也遇到了以下類型的代碼 使用學生共享 //這裏直接訪問數據庫字段。這裏他們的目標是獲得像「select * from student」或只有最後一個記錄的所有記錄。默認這個學生表有6列,但在dbf文件中我們有12列。在C#.NET中如何做到這一點? – 2013-04-23 01:34:31

+1

@AlanB是的,你是對的 - 正在思考完全不同的東西,並更新了我的答案。 – Jay 2013-04-23 09:06:55

0

沒有辦法直接將其轉換成C#。

SELECT 3 

FoxPro具有「工作區」的概念 - 就像插槽一樣,每個插槽都可以有一個打開的DBF文件。這個命令說「好的 - 我們正在看工作區3」。

這在中沒有等價物。NET

USE student SHARED 

這將打開student.dbf,在當前目錄中,在工作區3

SET FILTER TO 

共享訪問如果我們有一個過濾器設置,這將限制哪些記錄可用,現在清除過濾器。毫無意義,因爲我們剛剛打開了桌子,我們沒有設置過濾器。

LOCATE FOR id=thisform.txtStudentID.Value 

查找id = thisform.txtStudentID.Value的第一條記錄。後者是運行此代碼的窗體的自定義屬性。

因此,所有這些代碼都是基於值在student.dbf中查找記錄。如果你想拉這個紀錄早在使用OLE DB提供程序的C#你可以檢查How to load DBF data into a DataTable.

+1

只是想指出LOCATE找到滿足條件的_first_記錄。可能有其他人。 – 2013-04-22 21:15:17

0

SET FILTER TO不需要爲正在使用的表(打開),所以沒有過濾清除。到FoxPro的此位轉換爲C#:

SELECT * FROM student WHERE id=thisform.txtStudentID.Value

你將不得不循環的結果(如果有的話)。最佳做法是使用WHERE子句值的參數來防止SQL注入。

相關問題