1

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

SELECT 3
USE student shared

SET FILTER TO

LOCATE FOR id=thisform.txtStudentID.Value 

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

Use Student Shared 

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

4

3 回答 3

1

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

下面设置一个工作区(我已经几年没做过foxpro了,但是觉得这在VFP的后期版本中是多余的)。工作区只是内存中的一个空间,与其他工作空间分开。

Select 3

下面打开一个名为“Student”的表,用于对先前打开的工作区进行非只读访问

USE student shared

以下将清除表上的所有过滤器(因此,如果您“浏览”,您将获得所有记录)

SET FILTER TO

下面将记录指针设置为特定记录,其中 id 的记录等于当前表单上的 txtStudentID 文本框值(foxpro 不是强类型语言)

LOCATE FOR id=thisform.txtStudentID.Value 

对于您问题的第二部分,没有直接的方法可以在 foxpro 和 ac# 应用程序之间进行转换。要点是 Foxpro 是围绕数据库构建的,不是强类型的,而 c# 是强类型的,可以访问数据库。如果你做一个快速的谷歌搜索,你可能会找到像 Markus Egger 这样的人编写的工具,用于从 foxpro 转换为 c#。

恕我直言,根据将企业级系统从 VFP 迁移到 C#/SQL 服务器的经验——如果你想用系统做这个——停下来,说服自己这是一个坏主意,然后用 C# 重新编写东西——选择数据库最适合您的需求。

很难进一步评论 - 你还没有说明你使用的是什么版本的 foxpro - 你使用的是 foxpro 还是视觉 foxpro?你的应用程序有多大,背景是什么?

HTH 周杰伦

于 2013-04-22T18:59:06.343 回答
0

There is no way to directly convert that to C#.

SELECT 3

FoxPro has the concept of 'work areas' - like slots, each of which can have an opened DBF file in it. This command says "OK - we're looking at work area 3."

This has no equivalent in .NET

USE student SHARED

This will open student.dbf, in the current directory, for shared access in work area 3.

SET FILTER TO

If we have a filter set, which will limit what records are available, clear that filter now. Pointless, as we've just opened the table and we didn't set a filter.

LOCATE FOR id=thisform.txtStudentID.Value 

Find the first record where id = thisform.txtStudentID.Value. The latter part is a custom property of the form that is running this code.

So all this code is doing is locating a record in student.dbf based on a value. If you wanted to pull that record back in C# using the OLE DB provider you could check How to load DBF data into a DataTable.

于 2013-04-22T20:59:04.203 回答
0

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

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

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

于 2013-04-23T16:25:48.343 回答