【问题标题】:Opening SQL Server database from LINQ and SSMS Simultaneously同时从 LINQ 和 SSMS 打开 SQL Server 数据库
【发布时间】:2012-06-20 10:57:04
【问题描述】:

我的本​​地机器上有一个数据库。我有一个 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

【问题讨论】:

  • 你的连接字符串是什么?
  • 是这个窗体应用程序还是 Web 应用程序。很明显,您使用的是集成安全性,但尝试连接数据库的用户没有连接权限并在数据库上执行操作。
  • 我正在使用控制台应用程序。此应用程序正在访问使用 LINQ 的类库。

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


【解决方案1】:

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

如果您想从多个进程访问数据库,请将其附加到适当的 SQL Server 实例,然后通过 InitialCatalog 属性中的数据库名称连接到该实例。不要使用 AttachDbFileName 和 UserInstance。

这在Using SQL Server Express with ASP.NET中有描述

【讨论】:

  • 您无法访问这样的连接字符串。您应该使用 msdn.microsoft.com/en-us/library/c6t3b6f3.aspx 中描述的 ConfigurationManager.ConnectionStrings 属性。无论如何,您仍然使用“用户实例”关键字,这意味着连接将失败。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-22
  • 1970-01-01
  • 2017-11-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多