0

我的公司想慢慢切换一些用 Visual FoxPro 6.0 编写的旧程序。问题是我们有一堆仍然引用 FoxPro 表的程序。

我有一个查询将信息下拉到 vb.net 中的数据表中。我需要做什么才能将数据表中的信息插入 FoxPro 表中。

这是放入数据表的初始查询。

 Dim SConn As New OleDbConnection(conn)
 Dim da As OleDbDataAdapter
 Dim dt As New DataTable
 Dim sSql As String = "SELECT DISTINCT * FROM DWEmployee where cono <> 'XX' AND officeno <> 'XX' AND cono <> '' AND officeno <> ''"

 SConn.Open()
 da = New OleDbDataAdapter(sSql, SConn)
 da.SelectCommand.CommandTimeout = 90
 da.Fill(dt)
 SConn.Close()

我需要做什么才能在 VB.net 中复制此 Foxpro 代码

select distinct * from (the data table) into table gp_emps

如果需要,这将是我的 FoxPro 表的连接字符串。

Dim FConnString As String = "Provider=vfpoledb;Data Source=Z:\update_dwprm01\gp_emps.DBF;Collating Sequence=general;"
Dim FPdbConnection As New OleDbConnection(FConnString)

提前致谢。

4

1 回答 1

0

你似乎走在正确的轨道上。几个小问题。连接字符串的提供者应为

提供者=vfpoledb.1;

字符串的数据源组件应指向 .dbf 文件所在的物理目录,而不是特定的 .DBF 文件本身。

数据源=Z:\YourShareOnServer\SomePath

查询本身看起来没问题,因为您已经对其进行了编码。但是,当您对 .net 选择、插入、更新、删除有更多了解时,您肯定需要考虑使用 PARAMETERIZED 查询来防止 SQL 注入(即使 VFP 不实用,因为它只会扼杀评论/黑客尝试),但在实践中仍然很好。

建立你的命令并拥有“?” 作为“参数”的占位符,然后以与“?”相同的顺序添加参数 查询中的展示位置,例如:

dim OleDbCommand oCmd = new OleDbCommand();
oCmd.CommandText = "SELECT DISTINCT * from DWEmployee " _
                 + "where cono <> ? and officeno <> ? AND cono <> '' AND officeno <> ''"

' Only sampling with first 2 as parameters to get the idea...    
oCmd.Parameters.Add( "parmCONO", "XX" );
oCmd.Parameters.Add( "parmOffice", "XX" );

SConn.Open()
da = New OleDbDataAdapter(oCmd, SConn)
da.SelectCommand.CommandTimeout = 90

继续填写数据表...

我有很多关于 VFP、OleDB 和 C# 的帖子,但原理都是一样的。使用 OleDB 连接已经有一段时间了,但你已经到了那里。

于 2013-09-11T20:20:32.423 回答