0

ローカル マシンにデータベースがあります。LINQ to SQL を使用してこのデータベースにレコードを挿入する C# アプリケーションがあります。SSMS ( SQL Server Management Studio) を使用してデータベース (およびクエリ ウィンドウで選択したレコード) を開きました。ここで、C# アプリケーションを実行しようとすると、次のエラーが発生します。

“Cannot open user default database. Login failed. Login failed for user DFGV\G16570'.”

システムを再起動すると、このエラーはなくなります。

注: Integrated Security=True を使用しています

注: SQL Server は「LocalSystem」アカウントで実行されています

LINQ の接続文字列:

 Data Source=.; AttachDbFilename=C:\DevTEST\Databases\LibraryReservationSystem.mdf;
 Integrated Security=True; Connect Timeout=30;User Instance=True

注: 「ユーザー インスタンス」キーワード

以下は私のLINQクエリです:

public virtual void InsertOnSubmit(T entity)
    {
        GetTable().InsertOnSubmit(entity);
        Context.SubmitChanges();
    }

SSMS 経由でデータベースに接続しているときに LINQ を機能させるにはどうすればよいですか?

編集

応答に基づいて、以下に示すようにコードを変更しました。

   string connectionstring = "Data Source=.;Initial Catalog=LibraryReservationSystem;Integrated Security=True;Connect Timeout=30";

        using (var context = new RepositoryLayer.LibraryManagementClassesDataContext(connectionstring)) 
        {

            RepositoryLayer.Repository<RepositoryLayer.Account> selectedRepository = new RepositoryLayer.Repository<RepositoryLayer.Account>();
            selectedRepository.Context = context;
            AccountBusiness accountBl = new AccountBusiness(selectedRepository);

            //List<RepositoryLayer.Account> accountList = accountBl.GetAllAccounts();
            accountBl.InsertAccounts();
        }

注: 「User Instance」キーワードが TRUE に設定されていないことを確認してください。

4

1 に答える 1

1

AttachDbFilenameオプションを使用してデータベースを開いています。これは、データベースがユーザー インスタンスとして開かれ、データベースを開いたプロセス ID のみがアクセスできることを意味します。

複数のプロセスからデータベースにアクセスする場合は、適切な SQL Server インスタンスに接続し、InitialCatalog プロパティでデータベースの名前を渡して接続します。AttachDbFileName と UserInstance は使用しないでください。

これについては、ASP.NET での SQL Server Express の使用で説明されています。

于 2012-06-20T11:14:11.367 に答える