我们如何将DBF相关代码迁移到C#.NET?

时间:2013-04-22 17:46:31

标签: c# foxpro visual-foxpro

我在Visual foxpro中有一个与dbf操作相关的代码,如下所示。

SELECT 3
USE student shared

SET FILTER TO

LOCATE FOR id=thisform.txtStudentID.Value 

任何人都可以帮助我理解每行代码并转换为C#.net。将foxpro代码转换为C#需要采取哪些步骤?在这里我使用SQL Server作为C#Project的后端。有些时候我也遇到了以下类型的代码

Use Student Shared 

//这里直接访问数据库字段。这里他们的目标是获取所有记录,如“select * from student”或仅记录最后一条记录。默认情况下,这个学生表有6列,但在dbf文件中我们有12列。如何在C#.NET中执行此操作?

3 个答案:

答案 0 :(得分:1)

回答部分问题 - 此代码的作用是什么......

以下设置了一个工作区域(我现在几年没有做过foxpro,但是在VFP的后续版本中认为这是多余的)。工作区域只是记忆中的一个空间,可以与其他工作空间保持一致。

Select 3

以下打开一个名为“Student”的表,用于非先访问先前打开的工作区

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还是视觉foxpro?您的申请规模是多少,背景是什么?

HTH 杰

答案 1 :(得分: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.

答案 2 :(得分:0)

由于正在使用(打开)表,因此不需要SET FILTER TO,因此没有要清除的过滤器。将FoxPro的这一部分转换为C#:

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

然后你必须循环结果(如果有的话)。最佳实践是使用WHERE子句值的参数来防止SQL注入。