将平面 MDB 融合到 SQL 链接的 mdb 后,代码停止工作

本文关键字:mdb 代码 停止工作 链接 MDB 平面 融合 SQL | 更新日期: 2023-09-27 17:56:16

我已经修改了我的代码来计算 mdb 文件内每个表中的记录。它完美地工作,直到它使用指向 SQL 服务器的链接表命中 MDB 文件。无法将代码修改为直接指向 SQL Server,它适用于就地软件升级方案。

如何修改此代码以使用常规表和链接表?

using System;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.OleDb;
using System.Diagnostics;
using System.Collections;
using System.Data.Common;
using System.Collections.Generic;
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string[] databases = new string[3];
            databases[0] = "data.mdb";
            databases[1] = "chunk.mdb";
            databases[2] = "transactions.mdb";
            DateTime dt = DateTime.Now;
            string filename = "Results-" + dt.Hour + "_" + dt.Minute + "_" + dt.Second + ".txt";
            System.IO.StreamWriter file = new System.IO.StreamWriter(filename);

        foreach(string db in databases)
        {
                    file.WriteLine("##########BEGIN " + db + "##########'r'n");
                    Console.Write("Processing " + db + " Database . . . ");
                    string strAccessConn = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:'financial'" + db;
                    DbProviderFactory factory = DbProviderFactories.GetFactory("System.Data.OleDb");
                    DataTable userTables = null;
                    DataSet myDataSet = new DataSet();
                    OleDbConnection conn = new OleDbConnection(strAccessConn);
                    using (DbConnection connection = factory.CreateConnection())
                    {
                        connection.ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:'financial'DATA'" + db;
                        string[] restrictions = new string[4];
                        restrictions[3] = "Table"; 
                        try
                        {
                            connection.Open();
                        }
                        catch
                        {
                            Console.WriteLine("Error opening MDB file. Please ensure it is in the correct location");
                        }
                        userTables = connection.GetSchema("Tables", restrictions);
                    }

                   ArrayList tables = new ArrayList();
                   for (int i=0; i < userTables.Rows.Count; i++)
                        tables.Add(userTables.Rows[i][2].ToString());

                   foreach (string tbl in tables)
                   {
                            string queryString = "SELECT COUNT(*) FROM " + "[" + tbl + "]";
                            OleDbCommand command = new OleDbCommand(queryString, conn);
                            command.Connection.Open();
                            try
                            {
                                int records = (int)command.ExecuteScalar();
                                file.WriteLine("{0,-45}" + records,tbl);
                            }
                            catch (OleDbException e)
                            {
                                Console.WriteLine(e + "OLEDB Exception Occured.");
                            }
                            command.Connection.Close();
                   }

                    file.WriteLine("'r'n##########END " + db + "##########");
                    Console.WriteLine("Done!'n");
         }
            file.Close();
            Console.WriteLine(@"All Databases Complete. Press any key to continue...");
            Console.Read();  // Press any key to continue...
            System.Diagnostics.Process.Start("notepad.exe",filename);
        }
    }
}

将平面 MDB 融合到 SQL 链接的 mdb 后,代码停止工作

嗨,

我相信这不能用 ado.net 来完成,几年前我在 ado.net 1 上遇到了同样的情况。你必须使用ADOX。

以下是有用的 ADOX 示例列表http://allenbrowne.com/func-adox.html

ADOX 在表和链接表之间没有区别。 我看看我的硬盘,我可能会稍后发布一个示例。

您应该使用 ADOX 执行查询,并且不会遇到与 ADO.net 相同的问题

你也可以用DAO做到这一点。