将平面 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);
}
}
}
嗨,
我相信这不能用 ado.net 来完成,几年前我在 ado.net 1 上遇到了同样的情况。你必须使用ADOX。
以下是有用的 ADOX 示例列表http://allenbrowne.com/func-adox.html
ADOX 在表和链接表之间没有区别。 我看看我的硬盘,我可能会稍后发布一个示例。
您应该使用 ADOX 执行查询,并且不会遇到与 ADO.net 相同的问题
你也可以用DAO做到这一点。