C# 中的悖论表
Posted
技术标签:
【中文标题】C# 中的悖论表【英文标题】:Paradox Tables in C# 【发布时间】:2008-11-20 11:20:22 【问题描述】:我正在尝试将 Paradox 5 表读取到数据集或类似数据结构中,以便将其放入 SQL Server 2005 表中。我已经搜索了谷歌和 SO,但运气不佳。我试过 ODBC:
public void ParadoxGet()
string ConnectionString = @"Driver=Microsoft Paradox Driver (*.db );DriverID=538;Fil=Paradox 5.X;DefaultDir=C:\Data\;Dbq=C:\Data\;CollatingSequence=ASCII;";
DataSet ds = new DataSet();
ds = GetDataSetFromAdapter(ds, ConnectionString, "SELECT * FROM Growth");
foreach (String s in ds.Tables[0].Rows)
Console.WriteLine(s);
public DataSet GetDataSetFromAdapter(DataSet dataSet, string connectionString, string queryString)
using (OdbcConnection connection = new OdbcConnection(connectionString))
OdbcDataAdapter adapter = new OdbcDataAdapter(queryString, connection);
connection.Open();
adapter.Fill(dataSet);
connection.Close();
return dataSet;
这只是返回错误
ERROR [HY000] [Microsoft][ODBC Paradox Driver] 外部表不是预期的格式。
我也厌倦了 OELDB (Jet 4.0) 但得到相同的 External table is not in the expected format 错误。
我在 Data 文件夹中有 DB 文件和 PX(增长表的)...任何帮助都会非常有用。
【问题讨论】:
【参考方案1】:我遇到了同样的错误。它出现在我在 Win2008 64(以前的操作系统是 Win2003 32)上启动我的 C# 项目时。我还发现它在控制台应用程序中运行良好,并在 winforms 中给出了不同的错误。似乎问题来自在 64 位系统上工作的 32 ODBC 驱动程序的细节。 我的解决方案是:
// Program.cs
static void Main()
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
// it is important to open paradox connection before creating
// the first form in the project
if (!Data.OpenParadoxDatabase())
return;
Application.Run(new MainForm());
连接字符串是通用的:
string connStr = @"Driver=Microsoft Paradox Driver (*.db );DriverID=538;
Fil=Paradox 7.X;DefaultDir=C:\\DB;Dbq=C:\\DB;
CollatingSequence=ASCII;";
打开连接后,您可以在创建第一个表单后在任何地方关闭它(如果您需要大部分时间保持数据库关闭),例如:
private void MainForm_Load(object sender, EventArgs e)
Data.CloseParadoxDatabase();
这样做之后,您可以在执行应用程序期间每次需要打开和关闭连接,并且不会出现任何异常。
【讨论】:
另一种解决方案是简单地将项目属性中的平台目标设置为 x86(如果这样做合适的话)。【参考方案2】:也许这会对你有所帮助,
http://support.microsoft.com/support/kb/articles/Q237/9/94.ASP?LN=EN-US&SD=SO&FR=1 http://support.microsoft.com/support/kb/articles/Q230/1/26.ASP
似乎是最新版本的 Microsoft Jet 数据库引擎
(JDE) 不完全支持 Paradox,除非 Borland 数据库引擎
(BDE) 也已安装。
【讨论】:
【参考方案3】:尝试以“以管理员身份运行”权限运行所有应用程序,尤其是以“以管理员身份运行”权限运行 VS.NET...我相信您的问题会得到解决
【讨论】:
这对我有用。我对 Paradox 的理解不够深入,无法知道为什么会这样。例如,我将 PDOXUSRS.NET 文件的位置从 C:\ 移动到我认为每个人都有权限的地方,但这无助于避免“以管理员身份运行”解决方案。【参考方案4】:这不是一个答案,而是一个问题:您尝试使用 C# 进行数据操作而不是使用 SQL Server 工具直接加载数据的任何特定原因? DTS 或 SSIS 之类的工具似乎更适合这项工作。
【讨论】:
【参考方案5】:谢谢,我试试看。我想使用 C#,这样我就可以将它放在一些网页上,而无需额外将它放在 SQL 服务器中。
【讨论】:
以上是关于C# 中的悖论表的主要内容,如果未能解决你的问题,请参考以下文章