无法弄清楚 OLE DB 连接,C# 到 Access 2016

本文关键字:Access 2016 连接 弄清楚 OLE DB | 更新日期: 2023-09-27 18:36:10

我在VS Community 2015中编码。 我使用的是一台装有 Windows 10 的新计算机,刚刚从 8.0 升级。 我有一个独立的 (没有办公套件) 访问 2016 只是安装。 一切正常。

找不到可以为我提供 Access 2016 连接字符串的深蹲。 所以我尝试了这段代码(十几个化身):

    public OleDbConnection TryOleDbConnection()
    {
        string ConnString =
            "Provider=Microsoft.ACE.OLEDB.15.0;" + 
            "Data Source=" + 
            "C:''A A A A AutoBot4''CALENDAR''CALENDAR.addcb;" +
            "User Id=admin; Password=;";
        MessageBox.Show(ConnString);
        OleDbConnection OLE = new OleDbConnection();
        OLE.ConnectionString = ConnString;
        try
        {
            OLE.Open();
            MessageBox.Show("Opened");
        }
        catch (Exception ex)
        {
            MessageBox.Show("Failed");
        }
        finally
        {
        }
        return OLE;
    }

我无法获得任何工作,并且不确定如何获得更好的错误信息。 我使用的是非联网计算机,并且是唯一的用户和管理员。我也对用户ID和密码感到困惑,不明白它们是指系统还是数据库或其他东西。 这里的任何帮助将不胜感激! 我确信一旦我建立了连接,其余的就会变得容易。

无法弄清楚 OLE DB 连接,C# 到 Access 2016

你可以使用这样的函数:

 public void FindProvider()
 {
      var reader = OleDbEnumerator.GetRootEnumerator();
      var list = new List<String>();
      while (reader.Read())
      {
           for (var i = 0; i < reader.FieldCount; i++)
           {
                if (reader.GetName(i) == "SOURCES_NAME")
                {
                     list.Add(reader.GetValue(i).ToString());
                }
           }
      }
      reader.Close();
      foreach (var provider in list)
      {
           if (provider.StartsWith("Microsoft.ACE.OLEDB"))
           {
                this.provider = provider.ToString();
           }
      }
 }

它所做的只是搜索系统上可能的提供程序并选择与Microsoft.ACE.OLEDB匹配的提供程序,但您可以根据需要将其更改为任何内容。 您还需要注意,如果您的 Office 2016 为 64 位版本,则应用程序必须在 64 位模式下运行,如果您的 Office 版本为 32 位,则必须在 32 位模式下运行。

首先,给你一个建议

使用 ConnectionString Builder,或使用 App.config 文件来存储您的 连接字符串。

第二:数据库扩展是"accdb"而不是"addcb"

最后,"",Microsoft Access Database 2016的连接字符串不存在或很少出现。但是,如果您曾经用谷歌搜索过"Microsoft Access 数据库引擎 2016 可再发行组件",我认为您没有这样做,因为您已经安装了它,对吧?不是吗?您还会发现它说(安装说明部分):

如果您是使用 OLEDB 的应用程序开发人员,请设置提供程序 属性的参数 "Microsoft.ACE.OLEDB.12.0" 这确实是不正确的,关于这条误导性信息的讨论正在等待答案 我遇到了同样的问题,我的代码是,正如@heedfulcrayon前面提到的:

Imports System.Data.OleDb
Public Class ThisClass
  Private ConnectionString As String
  Private CN As OleDbConnection = New OleDbConnection
  'This function Returns the Oledb Provider for your Project
  'I.e: if you have Office 2016 installed, it will return :
  'Microsoft.ACE.OLEDB.16.0
  Public Function FindProvider() As String
        Dim Provider As String = String.Empty
        Dim reader = OleDbEnumerator.GetRootEnumerator()
        Dim list = New List(Of String)
        While reader.Read()
            For i = 0 To reader.FieldCount - 1
                If reader.GetName(i) = "SOURCES_NAME" Then
                    list.Add(reader.GetValue(i).ToString())
                End If
            Next
        End While
        Return Nothing
        reader.Close()
        For Each provider In list
            If Provider.StartsWith("Microsoft.ACE.OLEDB") Then
                Provider = Provider.ToString()
                Return Provider
            Else
                Return Nothing
                Exit Function
            End If
        Next
    End Function
'This function is to validate connection to the database *.accdb
Public Function DBConnected(ByVal DBLocation As String, ByVal DBPass As String) As Boolean
ConnectionString =
("Provider=" & FindProvider() & ";Data Source=" & DBLocation & ";" _
& "Jet OLEDB:Database Password = '" & DBPass & "'; " _
& "Persist Security Info=False;")
  CN.ConnectionString = ConnectionString
  If CN.State = ConnectionState.Open Then CN.Close()
        Try
            CN.Open()
        Catch ex As OleDbException
            MsgBox("Error Database connection : " & ex.Message, MsgBoxStyle.Critical)
            Result = False
            Return Result
            Exit Function
        End Try
        Result = True
        Return Result
    End Function
    'Ofcourse this is not secure connection String, but just an example.
    'You should always use Configuration Files to manage Database Connections.
End Class

现在,请记住,您可以只使用 Microsoft.ACE.OLEDB.16.0,也可以使用上面的整个脚本,如果它有效,则意味着有关 Access 2016 安装的所有内容都很好。