У меня есть проект Access VBA, откуда я ссылаюсь на COM Interop .TLB, написанный на C #.Этот код C # просто запрашивает базу данных SQL Server и возвращает значения с помощью простого запроса LINQ-to-Entity.
Я получаю ту же ошибку, упомянутую в этом вопросе:
Указанное именованное соединение либо не найдено в конфигурации, не предназначено для использования с поставщиком EntityClient, либонедопустимо
Однако в моем случае это Access VBA в приложении .ADP, которое ссылается на мой .Net 4.0 TLB, а не на другой проект .Net.
Я знаю, что если бы это был другой проект .Net, я мог бы добавить строку подключения EF XML в ее app.config или web.config.Но что за исправление, если моим «вызывающим» приложением является Access 2003 VBA?
Вот код VBA, который вызывает код .Net
Dim CandidatePassword As String
Dim abc As New MISHash.Password
Dim PasswordStatus As Boolean
CandidatePassword = InputBox("Enter your password")
PasswordStatus = abc.IsValidPassword("myusername", CandidatePassword) ' FAILS HERE
If PasswordStatus Then
MsgBox "Password valid."
Else
MsgBox "Password failed."
End If
Пожалуйста, помогите.Спасибо.
Обновление: вот мой код C #
using System.Linq;
using System.Runtime.InteropServices;
namespace MISHash
{
public class Password
{
public Password()
{
}
[ComVisible(true)]
public void HashAndSave(string SomePassword)
{
string hashed = BCrypt.HashPassword(SomePassword, BCrypt.GenerateSalt(12));
//save the hashed password in the database
}
[ComVisible(true)]
public bool IsValidPassword(string CandidateUserName, string CandidatePassword)
{
string OriginalHashedPassword;
using (MyDBEntities mycontext = new MyDBEntities())
{
OriginalHashedPassword = (from usr in mycontext.Users
where usr.UserName.Equals(CandidateUserName)
select usr.Password).FirstOrDefault();
}
bool matches = BCrypt.CheckPassword(CandidatePassword, OriginalHashedPassword);
return matches;
}
}
}