我正在使用VS Community 2015进行编码。我使用的是Windows 10的新计算机,刚刚从8.0升级。我有一个独立的(没有Office套件)Access 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和密码感到困惑,不了解它们是否涉及系统或数据库或其他内容。任何帮助将非常感谢!我确信,一旦我得到连接,剩下的就很容易了。
答案 0 :(得分:2)
你可以使用这样的函数:
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匹配的提供程序,但您可以根据需要将其更改为。您还需要注意,如果您拥有64位版本的Office 2016,您的应用程序必须以64位模式运行,如果您的办公室版本是32位,则必须以32位运行。
答案 1 :(得分:0)
首先,给您的建议:
使用ConnectionString Builder或使用App.config文件存储您的 连接字符串。
第二个:数据库扩展名是“ accdb ”,而不是“ addcb ”
最后,“ 是”,Microsoft Access Database 2016的连接字符串不存在或很少出现。但是,如果您曾经用Google搜索“ Microsoft Access Database Engine 2016 Redistributable ”,我认为您没有这样做是因为已经安装了它,对吗?是不是您还会发现它说(“安装说明”部分):
如果您是使用OLEDB的应用程序开发人员,请设置提供程序 ConnectionString属性的参数 “ Microsoft.ACE.OLEDB.12.0” 哪一个确实不正确,有关这一误导性信息的讨论正在等待answer 我遇到了同样的问题,我要解决的代码也是,正如@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安装的所有内容都很好。