我在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中执行此操作?
答案 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注入。