操作步骤:
1. 下载Foxpro的OLEDB驱动VFPOLEdbsetup.msi,安装,选择允许everyone运行。
2. 注册OLEDB驱动:
regsvr32 /s "C:\Program Files (x86)\Common Files\system\ole db\vfpoledb.dll"
3. 运行x86版PowerShell:
$ConnString = "Provider=vfpoledb.1;Data Source=c:\accounts.dbf;Collating Sequence=machine;" $Conn = new-object System.Data.OleDb.OleDbConnection($connString) $conn.open() $cmd = new-object System.Data.OleDb.OleDbCommand("select * from accounts", $Conn) $DataAdapter = new-object System.Data.OleDb.OleDbDataAdapter($cmd) $dataset = new-object System.Data.Dataset $DataAdapter.fill($dataset) $dataset.Tables[0]
坑列表:
-
从Foxpro驱动描述:
“The VFPODBC driver is no longer supported. We strongly recommend using the Visual FoxPro OLE DB provider as a replacement.”
-
ODBC驱动分为32位和64位。只有编译为32位的应用程序才能调用32位的ODBC驱动。
"A 32-bit app uses a 32-bit ODBC driver even when installed on 64-bit Windows. But on 64-bit systems, there are two views on ODBC - one is 64-bit, the other is 32-bit. It looks like you opened the default 64-bit view which doesn't show the 32-bit ODBC drivers. To solve this go to c:\windows, there you see a folder named SysWOW64. Here you find odbcad32.exe. After launching the exe you can add a new system dsn or user dsn for the required ODBC driver. Configure it as usual. All other ODBC drivers you have been missing will appear there."
-
安装了Visual Foxpro后,会安装32位ODBC驱动VFPODBC.DLL。
安装OLEDB驱动时要选择允许everyone运行。
要注册vfpoledb.dll。
OLEDB驱动的Provider为vfpoledb.1。
要在32位PowerShell下运行来调用该驱动。
后记:
尝试在32位PowerShell下操作ODBC驱动,失败。
$ConnString ="Driver={Microsoft Visual FoxPro Driver};SourceType=DBF;SourceDB='c:\foxpro\';Exclusive=No;Collate=Machine;NULL=NO;DELETED=NO;BACKGROUNDFETCH=NO;" $Connection = New-Object System.Data.Odbc.OdbcConnection $Connection.ConnectionString = $ConnString $Connection.open() $Command = New-Object System.Data.Odbc.OdbcCommand $Command.Connection = $Connection $Command.CommandText = $Query $Reader = $Command.ExecuteReader() $Counter = $Reader.FieldCount while ($Reader.Read()) { $sqlObject = @{} for ($i = 0; $i -lt $Counter; $i++) { $sqlObject.Add( $Reader.GetName($i), $Reader.GetValue($i)); } $sqlObject } $Connection.Close() $Reader.Close()
但在32位操作系统上运行是正常。若其他语言在开发时应编译为32位版本。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。