【问题标题】:unable to access remote database in C#无法在 C# 中访问远程数据库
【发布时间】:2015-11-30 07:49:55
【问题描述】:

我已更改连接字符串以指向远程服务器中的数据库。但是当我执行项目时,程序仍然指向本地数据库。

<entityFramework>
<providers>
  <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
</providers>
</entityFramework>


<connectionStrings> 
<add name="TEDALS_Ver01.DAL.TedalsContext" 
  connectionString="Data Source=FE0VMC0643\SQLEXPRESS;
  AttachDbFilename=|DataDirectory|\TeDaLSdev.mdf;
  Integrated Security=False" 
  providerName="System.Data.SqlClient" 
/>
<!--<add
   name="TEDALS_Ver01.DAL.TedalsContext"
   connectionString="Server=FE0VMC0643; Database=TeDaLSdev; "
   providerName="System.Data.SqlClient" />-->

<!--<add name="TEDALS_Ver01.DAL.TedalsContext"
     providerName="System.Data.SqlClient" 
     connectionString="Server=FE0VMC0643;Data Source=FE0VMC0643;
     Initial Catalog=TeDaLSdev;
     Integrated Security=True;
     Connect Timeout=15;
     Encrypt=False;
     TrustServerCertificate=False;" />-->

</connectionStrings> 

评论是我到目前为止所使用的不同连接字符串。当我使用 LocalDB 时,我从来没有连接字符串。

连接构造函数

public class TedalsContext : DbContext
{
    public TedalsContext()
        : base("TedalsContext")
    {
        //Database.SetInitializer<TedalsContext>(null);
    }
}

我使用 SQL Server Express 作为我的数据库。我还尝试将构造函数中base 的参数名称更改为数据库的名称。但这并没有改变任何东西。

我已经尝试过是否可以通过 SSMS 访问数据库。我能够创建表,但我无法重命名数据库(我没有重命名数据库 TeDalSdev 的访问权限)。

我可以尝试其他任何解决方法吗?远程数据库和本地数据库的名称是否应该相同,以避免更改大量代码?

更新

控制器

public class LsystemFamiliesController : Controller
{
    private TedalsContext db = new TedalsContext();
    //Code goes here
}

【问题讨论】:

  • 用 base("TEDALS_Ver01.DAL.TedalsContext") 调用基础?在文档here 中,它说 EF 将以不同的方式获取代码优先和设计器生成的上下文的连接字符串..
  • 但独立地,您传递给 DBContext 构造函数的名称应该是连接字符串的名称。您只传递了 TedalsContext,它看起来并不存在于您的配置文件中。
  • 也见this page
  • @OguzOzgul:现在我在服务器中添加了一个与我的 localdb 完全相同的新数据库。我真的不明白连接字符串中的不同参数。所以我必须通过反复试验才能让它以某种方式工作。
  • 数据库名称不是这里的问题,你没看到吗?连接字符串“TedalsContext”的名称与配置文件中的任何连接字符串都不匹配。试试 base("TEDALS_Ver01.DAL.TedalsContext") ?

标签: c# sql-server asp.net-mvc visual-studio windows-authentication


【解决方案1】:

我已从我的一个项目的 Web 配置文件和所有(应该)检查的字段中添加了一个连接字符串。这是在&lt;connectionStrings&gt; 标签内。您需要将其设为默认连接,并且您只能将一个连接字符串作为默认连接。

<add name="DefaultConnection" providerName="System.Data.SqlClient" 
    connectionString="Data Source=Providedbyhost;integrated 
    security=false;Initial Catalog=DB_Name;User Id=UserId;Password=password;
    Trusted_Connection=false; TrustServerCertificate=true;
    Encrypt=true;MultipleActiveResultSets=True" />

您的数据库上下文在哪里:

public TedalsContext()
    : base("DefaultConnection")

将所有东西都切换到 DefaultConnection,直到你让它工作,然后你可以专注于更改名称。注释掉您的本地数据库连接字符串。如果需要,甚至可以在测试时将其从项目中删除(并将其保存在其他位置)。

我还添加了我的文件夹目录的屏幕截图,以显示我正在修改的 Web 配置文件夹。看到它以蓝色突出显示。

此屏幕截图还向您展示了在 VS 中导航以测试连接字符串的位置。

我建议你看这里:

How to: Access SQL Server Using Windows Integrated Security

What will be the connectionstring for mssql windows authentication

还有这个:

Connection string using Windows Authentication

正如我在讨论中所建议的那样。我还建议联系网络托管服务提供商,因为我遇到了无法连接的问题,而且这是托管端的问题。

如果您需要更多帮助,请大声说出来。

【讨论】:

  • 我正在使用 Windows 身份验证。所以我可以跳过用户名和密码字段??
  • 我的服务器资源管理器中的连接处于活动状态。但仍然是从本地数据库中获取的数据。
  • 所以现在我已经完全按照你的方式更改了连接:关于我的服务器和数据库的详细信息;删除了用户名和密码,仍然没有更改。我需要在实体框架部分更改一些内容吗?
  • 您的回答将我引向了正确的方向。在我的控制器中增加一条线,它工作得很好。我必须添加base("name=TedalsContext")。现在它正在工作.. 非常感谢.. 真的很多.. :) :) :)
  • 没有。使用默认连接套索它会工作。但我必须在基础中添加属性name。但是你的链接真的很有帮助..而且我可以理解数据库加载了你的截图..
【解决方案2】:

在您的 TedalsContext 构造函数下,使用: base(connectionStringName)

否则,上下文将首先将其视为代码,并在您的 SQLExpress 本地数据库中创建一个 TedalContext。

public class TedalsContext : DbContext
{
    public TedalsContext()
        : base("TEDALS_Ver01.DAL.TedalsContext")
    {
        //Database.SetInitializer<TedalsContext>(null);
    }
}

【讨论】:

  • 我也已经尝试过了。检查问题中的 cmets。 @Oguz 已经建议..
  • 您是否尝试将整个连接字符串插入base()
  • 是的。现在根据其他答案,我已将我的基础更改为默认连接
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-06
  • 1970-01-01
  • 2021-01-08
  • 2016-08-22
  • 2015-02-02
相关资源
最近更新 更多