同时从LINQ和SSMS打开SQL Server数据库

时间:2012-06-20 10:57:05

标签: c# .net visual-studio-2010 sql-server-2008 linq-to-sql

我的本​​地计算机上有一个数据库。我有一个C#应用程序,它使用LINQ to SQL将记录插入此数据库。我使用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();
        }

注意:确保“用户实例”关键字未设置为TRUE

1 个答案:

答案 0 :(得分:1)

您正在使用AttachDbFilename选项打开数据库,这意味着数据库作为用户实例打开,只能由打开它的进程标识访问。

如果要从多个进程访问数据库,请将其附加到正确的SQL Server实例,然后连接到它,并在InitialCatalog属性中传递数据库的名称。不要使用AttachDbFileName和UserInstance。

Using SQL Server Express with ASP.NET

中对此进行了描述