如何从 .NET 应用程序读取和写入 Paradox 7.x 数据库?
How to read and write to a Paradox 7.x database from .NET app?
我开发 .NET 应用程序 (C#),我需要读取和更新 Paradox 7.x 数据库中的一些数据。
根据 Microsoft article,Paradox 7-8 不提供对 OLEDB 的支持。
根据 another SO question 可以读取,但不能写入。
那么有没有什么方法(可能是一些第三方库或一些 BDE 包装器)如何读取和写入 Paradox 7.x 数据库?
更新 我试过 OleDB 方法:
var builder = new OleDbConnectionStringBuilder();
builder.DataSource = "D:\MyBase\";
builder.Provider = "Microsoft.Jet.OLEDB.4.0";
var connection = new OleDbConnection(builder.ToString() + ";Extended Properties=Paradox 5.x");
var command = new OleDbCommand("SELECT * FROM Planes", connection);
connection.Open();
using (var reader = command.ExecuteReader())
if (reader.HasRows)
while (reader.Read())
listBox1.Items.Add(reader.GetString(2));
这个失败并出现 OleDbException(可以预料,因为我的数据库有 Paradox 7.x 格式):
External table is not in the expected format
如果我将连接字符串更改为 Extended Properties=Paradox 7.x
-
一个失败并出现另一个 OleDbException(可以预料,因为根据 Microsoft 文章,OLEDB 不支持 Paradox 7))
Invalid operation
我试过 ODBC 方法:
var connectionString = "Driver={Microsoft Paradox Driver (*.db )};"
+ "DriverID=538;Fil=Paradox 7.X;"
+ "DefaultDir=D:\MyBase\;"
+ "Dbq=D:\MyBase\;"
+ "CollatingSequence=ASCII;";
var connection = new OdbcConnection(connectionString);
var command = new OdbcCommand("SELECT * FROM Planes", connection);
connection.Open();
using (var reader = command.ExecuteReader())
if (reader.HasRows)
while (reader.Read())
listBox1.Items.Add(reader.GetString(2));
那个也失败并出现 OdbcException
ERROR [HY000] [Microsoft] [Paradox ODBC driver] External table is not in the expected format
所以现在什么也做不了..
所以最后我通过 Microsoft.Jet.OLEDB.4.0 读取和 甚至写入 Paradox 7.x 数据库(depite Microsoft tells 我们不支持 Paradox 7-8):
- 安装AccessDatabaseEngine for Office 2007 (32bit)
- 安装AccessDatabaseEngine for Office 2010 (32bit)(选择AccessDatabaseEngine.exe)
- 安装BDE 5.1.1.1(最好安装在D:\BDE这样的地方)
- 通过 BDE 管理员 change NET DIR 从 C:\ 到任何你有写权限的文件夹(我已经改为 D:\BDE)
在下面的代码之后就像一个魅力
var builder = new OleDbConnectionStringBuilder();
builder.Add("Provider", "Microsoft.Jet.OLEDB.4.0");
builder.Add("Data Source", @"D:\MyBase\");
builder.Add("Persist Security Info", "False");
builder.Add("Extended properties", "Paradox 7.x; HDR=YES");
var connection = new OleDbConnection(builder.Tostring());
var command = new OleDbCommand("SELECT * FROM Planes", connection);
//reading
connection.Open();
using (var reader = command.ExecuteReader())
if (reader.HasRows)
while (reader.Read())
listBox1.Items.Add(reader.GetString(2));
//writing
command = new OleDbCommand("DELETE * FROM Planes", connection);
command.ExecuteNonQuery();
connection.Close();
希望这些信息对像我这样的人有所帮助。
我开发 .NET 应用程序 (C#),我需要读取和更新 Paradox 7.x 数据库中的一些数据。
根据 Microsoft article,Paradox 7-8 不提供对 OLEDB 的支持。
根据 another SO question 可以读取,但不能写入。
那么有没有什么方法(可能是一些第三方库或一些 BDE 包装器)如何读取和写入 Paradox 7.x 数据库?
更新 我试过 OleDB 方法:
var builder = new OleDbConnectionStringBuilder();
builder.DataSource = "D:\MyBase\";
builder.Provider = "Microsoft.Jet.OLEDB.4.0";
var connection = new OleDbConnection(builder.ToString() + ";Extended Properties=Paradox 5.x");
var command = new OleDbCommand("SELECT * FROM Planes", connection);
connection.Open();
using (var reader = command.ExecuteReader())
if (reader.HasRows)
while (reader.Read())
listBox1.Items.Add(reader.GetString(2));
这个失败并出现 OleDbException(可以预料,因为我的数据库有 Paradox 7.x 格式):
External table is not in the expected format
如果我将连接字符串更改为 Extended Properties=Paradox 7.x
-
一个失败并出现另一个 OleDbException(可以预料,因为根据 Microsoft 文章,OLEDB 不支持 Paradox 7))
Invalid operation
我试过 ODBC 方法:
var connectionString = "Driver={Microsoft Paradox Driver (*.db )};"
+ "DriverID=538;Fil=Paradox 7.X;"
+ "DefaultDir=D:\MyBase\;"
+ "Dbq=D:\MyBase\;"
+ "CollatingSequence=ASCII;";
var connection = new OdbcConnection(connectionString);
var command = new OdbcCommand("SELECT * FROM Planes", connection);
connection.Open();
using (var reader = command.ExecuteReader())
if (reader.HasRows)
while (reader.Read())
listBox1.Items.Add(reader.GetString(2));
那个也失败并出现 OdbcException
ERROR [HY000] [Microsoft] [Paradox ODBC driver] External table is not in the expected format
所以现在什么也做不了..
所以最后我通过 Microsoft.Jet.OLEDB.4.0 读取和 甚至写入 Paradox 7.x 数据库(depite Microsoft tells 我们不支持 Paradox 7-8):
- 安装AccessDatabaseEngine for Office 2007 (32bit)
- 安装AccessDatabaseEngine for Office 2010 (32bit)(选择AccessDatabaseEngine.exe)
- 安装BDE 5.1.1.1(最好安装在D:\BDE这样的地方)
- 通过 BDE 管理员 change NET DIR 从 C:\ 到任何你有写权限的文件夹(我已经改为 D:\BDE)
在下面的代码之后就像一个魅力
var builder = new OleDbConnectionStringBuilder();
builder.Add("Provider", "Microsoft.Jet.OLEDB.4.0");
builder.Add("Data Source", @"D:\MyBase\");
builder.Add("Persist Security Info", "False");
builder.Add("Extended properties", "Paradox 7.x; HDR=YES");
var connection = new OleDbConnection(builder.Tostring());
var command = new OleDbCommand("SELECT * FROM Planes", connection);
//reading
connection.Open();
using (var reader = command.ExecuteReader())
if (reader.HasRows)
while (reader.Read())
listBox1.Items.Add(reader.GetString(2));
//writing
command = new OleDbCommand("DELETE * FROM Planes", connection);
command.ExecuteNonQuery();
connection.Close();
希望这些信息对像我这样的人有所帮助。