Entity Framework Ошибка в Access VBA - «Указанное именованное соединение либо не найдено в конфигурации ...» - PullRequest
0 голосов
/ 30 декабря 2011

У меня есть проект 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;
    }
}
 }

1 Ответ

1 голос
/ 01 января 2012

См. Аналогичный вопрос:
Можно ли использовать / получить доступ к app.config из кода .net при вызове через COM

Эти два варианта кажутся вам наилучшими:

  1. Вручную создать вторичный домен приложений
  2. Преобразовать в проект VSTO

Редактировать

Вы также можете попробоватьпередача жестко закодированной строки соединения в конструкторе:

MyDBEntities mycontext = new MyDBEntities("Server=.\SQLEXPRESS;Database=School;Trusted_Connection=true;Integrated Security=True;MultipleActiveResultSets=True"))
...