【问题标题】:ODBC connection to MS Access database with SQLServer linked tables via DSN通过 DSN 与带有 SQLServer 链接表的 MS Access 数据库的 ODBC 连接
【发布时间】:2013-04-13 10:11:08
【问题描述】:

所以我有一个 msaccess 数据库,其中包含几个链接表,这些链接表通过 DSN 指向 SQL Server 数据库,并内置了用户名和密码。

在我的 .net 应用程序中,我需要连接到我的访问数据库,并在链接表上运行查询。我尝试过使用 OLEDB 和 ODBC 方法,似乎都不适用于指向 SQL Server 的链接表,但指向其他访问表的链接表很好。我收到一个错误,例如: ODBC--- 连接到“THISDSN”失败。

有没有办法连接到我的访问数据库,这样我就可以简单地运行查询,而链接表是 SQL 服务器还是只是访问表都没有关系?

【问题讨论】:

  • 为什么不能将 .NET 应用程序也直接连接到 SQL Server?因此,您的 .NET 应用程序将连接到 Jet 表的 Access,并连接到 MSSQL 表的 SQL Server。另一种选择是在 Access 中对本地表和链接表编写查询,并让您的 .NET 应用程序运行这些保存的查询。

标签: c# sql-server ms-access odbc linked-tables


【解决方案1】:

您所描述的可以完成,您只需要检查设置中的一些细节即可。

我有以下 Access 数据库,其中包含一个本地表 [Expenses] 和一个链接表 [dbo_AccountCodes]

我还有一个名为 [ExpenseDetails] 的已保存查询,它从 [Expenses] 中提取数据并使用 JOIN 检索相关的 [AccountDescription]:

SELECT Expenses.*, dbo_AccountCodes.AccountDescription
FROM Expenses INNER JOIN dbo_AccountCodes ON Expenses.AccountID = dbo_AccountCodes.AccountID;

我可以使用普通的 OLEDB 方法从我的 C# 应用程序运行保存的 Access 查询:

static void Main(string[] args)
{
    var conn = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\__tmp\accounting.accdb;");
    conn.Open();
    var cmd = new OleDbCommand("SELECT * FROM ExpenseDetails", conn);
    OleDbDataReader rdr = cmd.ExecuteReader();
    int rowCount = 0;
    while (rdr.Read())
    {
        rowCount++;
        Console.WriteLine("Row " + rowCount.ToString() + ":");
        for (int i = 0; i < rdr.FieldCount; i++)
        {
            string colName = rdr.GetName(i);
            Console.WriteLine("  " + colName + ": " + rdr[colName].ToString());
        }
    }
    rdr.Close();
    conn.Close();

    Console.WriteLine("Done.");
    Console.ReadKey();
}

当我运行它时,我得到:

Row 1:
  ID: 1
  UserID: dr.evil
  ExpenseDescription: "Laser"
  ExpenseAmount: 1000000
  AccountID: 101
  AccountDescription: Weapons of World Domination
Done.

所以它可以工作。您可以检查的一些事项是:

  1. 您是否为链接表使用了系统 DSN?根据 C# 代码的执行方式,如果 DSN 属于其他类型,它可能无法“看到”它。

  2. 如果这是一个 ASP.NET 应用程序,请确保运行代码的进程具有访问 SQL Server 数据库所需的凭据。您说您的 DSN 具有“内置的用户名和密码”,因此请确保链接表的 .Connect 字符串明确表示 Trusted_Connection=No;。您也可以尝试在 Access 中重新创建表链接,并在“链接表”对话框中选择“保存密码”选项。如果您决定尝试在 SQL Server 上使用 Windows 身份验证,您可能需要在服务器上添加 SQL 登录名,并在数据库上为 NT AUTHORITY\SYSTEM 和/或 NT AUTHORITY\NETWORK SERVICE 和/或 YourDomain\YourIisServerName$ 添加 SQL 用户,具体取决于您的设置。

【讨论】:

    猜你喜欢
    • 2023-03-24
    • 2011-03-25
    • 2013-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多