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# 中的悖论表的主要内容,如果未能解决你的问题,请参考以下文章

Python代码中的数学之美:从自由落体到爬虫悖论,十分钟开启数学思维

如何使用 C# 从表中的二维数组输出值

c# Excel 数据透视表中的折叠字段

SQL 数据库表中的 C# 类

如何使用 C# 程序中的新值快速更新表中的所有行

将 C# 对象列表中的多行数据插入 Oracle 12 数据库中的表中