连接字符串的正确提供程序格式

时间:2013-12-23 19:45:50

标签: c# asp.net-mvc-4 connection-string

可能是一个简单的问题,但我很难找到适合我情况的答案。

使用Visual Studio Express 2012的MVC 4,C#应用程序

我遵循了这个tutorial并尝试将连接字符串从本地数据库(工作)切换到在线托管的MS SQL数据库(1and1服务器)。

在线提供商提供的连接信息为:

Provider=sqloledb;Data Source=db501044113.db.1and1.com,1433;Initial Catalog=db501044113;User Id=dbo501044113;Password=*****;

我的连接字符串是这样的:

<add name="RCDBContext"
     connectionString="Data Source=db501044113.db.1and1.com,1433;Initial Catalog=db501044113;User Id=dbo501044113;Password=*****" 
     providerName="System.Data.SqlClient" 
/>

当我加载页面时,我遇到了权限被拒绝错误:CREATE DATABASE permission denied in database 'master'.

为什么要尝试创建现有数据库?

我发现的大部分Google答案都在讨论服务器端权限。由于我的数据库由第三方托管,因此我无权访问这些权限。似乎我不需要它,因为这是一个提供的常见服务。

我是否真的需要更改服务器端权限或我的应用程序有问题?

可能先与Entity Framework和代码有关吗?

我尝试在连接字符串中使用Provider=sqloledb但出现了不同的错误。我是否应该使用providerName="System.Data.SqlClient"以外的其他类型的提供商?

2 个答案:

答案 0 :(得分:1)

问题不在于您的Connectionstring,而是您尝试重新生成数据库的代码。

Entity Framework 4 Code First - Prevent DB Drop/Create

System.Data.Entity.Database.SetInitializer(new CreateDatabaseIfNotExists<SampleContext>()); 

答案 1 :(得分:0)

我的解决方案最终成为一种不同类型的初始化程序。而是设置三个选项之一:

  • CreateDatabaseIfNotExists
  • DropCreateDatabaseAlways
  • DropCreateDatabaseIfModelChanges

我只是将它设置为null,如下所示:

Database.SetInitializer<RCDBContext>(null);

此外,对于那些想知道放置此代码的人,请将其添加到Global.asax方法中的Application_Start()文件中。

例如,这就是我的样子:

    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();

        WebApiConfig.Register(GlobalConfiguration.Configuration);
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        BundleConfig.RegisterBundles(BundleTable.Bundles);
        AuthConfig.RegisterAuth();

        Database.SetInitializer<RCDBContext>(null);
    }