首页 文章

使用.mdf数据库发布ASP.NET项目

提问于
浏览
3

我有一个ASP.NET项目,它使用存储在App_Data文件夹中的本地.mdf数据库 . 我通常将本地网站发布到我的桌面,然后获取所有文件并将其上传到asp.net服务器 .

成功上传后,由于某些原因无法访问数据库 .

我在web.config中包含了数据库的连接字符串

<connectionStrings> 
    <clear />
      <add name="LocalSqlServer" connectionString="Data Source=(LocalDB)\v11.0;AttachDBFilename=|DataDirectory|database.mdf;database=database;Integrated Security=True;User Instance=False;Context Connection=False;" providerName="System.Data.SqlClient"/>  
      </connectionStrings>

并不是说我见过几个在线解决方案,声明将LocalDB更改为\ v11.0到 . \ SQLEXPRESS;在连接字符串中,但这不起作用 .

请告知如何使用项目正确上传数据库并设置适当的访问权限 .

当我尝试打开数据库连接时,我收到以下错误消息

System.Security.SecurityException:请求失败 . 在System.Security.CodeAccessSecurityEngine.Check在System.Security.CodeAccessSecurityEngine.Check在System.Security.PermissionSet.Demand在System.Data.LocalDBAPI(对象的需求,StackCrawlMark&stackMark,布尔isPermSet)(PermissionSet中permSet,StackCrawlMark&stackMark)() . System.Data.SqlClient.TdsParser.Connect上的System.Data.LocalDBAPI.CreateLocalDBInstance(String实例)中的DemandLocalDBPermissions()(ServerInfo serverInfo,SqlInternalConnectionTds connHandler,Boolean ignoreSniOpenTimeout,Int64 timerExpire,Boolean encrypt,Boolean trustServerCert,Boolean integratedSecurity,Boolean withFailover) System.Data.SqlClient.SqlInternalConnectionTds.AttemptOneLogin(ServerInfo serverInfo,String newPassword,SecureString newSecurePassword,Boolean ignoreSniOpenTimeout,TimeoutTimer timeout,Boolean withFailover)at System.Data.SqlClient.SqlInternalConnectionTds.LoginNoFailover(ServerInfo serverInfo,String newPassword,SecureString newSecurePassword,Boolean redirectedUserInstan ce,SqlConnectionString connectionOptions,SqlCredential凭证,TimeoutTimer超时)在System.Data.SqlClient.SqlInternalConnectionTds的System.Data.SqlClient.SqlInternalConnectionTds.OpenLoginEnlist(TimeoutTimer超时,SqlConnectionString connectionOptions,SqlCredential凭证,String newPassword,SecureString newSecurePassword,Boolean redirectedUserInstance) . 在System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions选项,DbConnectionPoolKey poolKey,对象poolGroupProviderInfo,DbConnectionPool池,DbConnection)中的ctor(DbConnectionPoolIdentity标识,SqlConnectionString connectionOptions,SqlCredential凭证,Object providerInfo,String newPassword,SecureString newSecurePassword,Boolean redirectedUserInstance,SqlConnectionString userConnectionOptions) System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection上的owningConnection,DbConnectionOptions(userOptions)(DbConnectionPool池,DbConnectionOptions选项,DbConnell)位于System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnectionOptions userOptions)的System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnectionOptions userOptions)的System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject,UInt32 waitForMultipleObjectsTimeout)中的ctionPoolKey poolKey,DbConnectionOptions(userOptions) ,System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection,System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject,TaskCompletionSource1 retry,DbConnectionOptions userOptions,DbConnectionInternal&connection))处于布尔值allowCreate,Boolean onlyOneCheckConnection,DbConnectionOptions userOptions,DbConnectionInternal&connection) TaskCompletionSource1重试,DbConnectionOptions USEROPTIONS,在System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection DbConnectionInternal&连接)(的DbConnection outerConnection,DbConnectionFactory connectionFactory的, TaskCompletionSource1重试,DbConnectionOptions USEROPTIONS)在System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource1重试)在System.Data.SqlClient.SqlConnection.Open()在Database.establishConnection()失败了行动:需求类型第一失败的权限是:System.Security.PermissionSet失败的程序集的区域是:MyComputer

5 回答

  • 4

    为什么不将数据库发布为脚本而不是.mdf它比使用.mdf更稳定!

    使用SQL管理工作室image

  • 0

    SQLExpress是一个有限的SQL Server版本(2008R2之后的存储容量为10GB,R2之前的存储容量为2-4GB)

    既然如此服务器用于设置密码,用户,角色等所需的安全性要求 . 除了这些要求之外,对于ASP.NET或通常在WWW解决方案上,许多主机提供商不支持将数据库解决方案自动连接到其数据库服务器 .

    因此,当您选择在Web项目中使用SQLExpress时,

    您可以将创建脚本(创建数据库,表,安全要求,存储过程,视图等等)复制到服务器端并在服务器端运行这些脚本 - 像thealghabban建议的那样 -

    或者从服务器端手动创建所有需求(提供者具有这些实现的设置页面)

    或者向您的提供商询问他们是否允许附加,以决定您的方式

    {通过代码附加,就像你已经在连接字符串中尝试一样 - 使用AttachDBFileName语句 - 你需要在你的连接字符串中添加“UserInstance”语句并将其设置为“true”而不是false!由于“UserInstance”语句不建议使用Connection字符串,因此您的主机提供程序可能不允许使用此语句 . 所以,至少对于这种弃用,您需要询问您的提供商}

    如果你仍想在这里使用SQLExpress,你就是WWW连接字符串的一个例子:

    Server=SQLServerNameorIPAddressofYourHostProvider\SQLServerInstanceNameofYourHostProvider;Database=yourDatabaseName;User Id=yourUserName;Password=yourPassword;
    

    如果我们假设我们的托管服务提供商是Stackoverflow,那么我们的连接字符串可能是这样的:

    //在那里演示了stackoverflow.com提供程序在publicservers子域下和该子域MSSQL2008R2目录下提供数据库服务器

    Server=publicservers.stackoverflow.com/MSSQL2008R2\stackExpress;Database=myDB;User Id=theUser;
    Password=WhateverPassword;
    

    本地V11几乎是一个新的解决方案(如果我自2011年第4季度以来没有错),它嵌入了像SQLCE(.sdf扩展数据库文件)或者作为旧时尚访问数据库或其他嵌入式解决方案但是在其上有很大改进存储容量(访问最大2 gb,.sdf db文件最大1 gb):它是SQL Server Express => 10GB .

    要使用本地数据库,如果您的VS版本不是2012您需要复制所需的Dll,您可以在ProgramFiles目录下找到或在操作系统中安装LocalDB的位置 . 在VS2012和2013本地数据库中安装VS.但无论如何检查你的项目的bin文件是否有本地复制的Local Express dll ..

    对于本地数据库,它的运行时要求你的目标框架至少应该是v 4.0.2 ..也检查这个..

  • 0

    发现类似的问题http://www.codeproject.com/Questions/677651/How-to-publish-mdf-database-file-into-a-asp-net-we它有一个解决方案,希望它有所帮助 .

  • 0

    你可以试试这个 .

    string constr=@"DataSource=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\yourdatabase.mdf;Integrated Security=True;User Instance=True;";
       public SqlConnection myConnection = new SqlConnection(constr);
    

    或试试这个

    <connectionStrings>
    
    <add name="myConnection" connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\yourdatabse.mdf;Integrated Security=True;User Instance=True" providerName="System.Data.SqlClient"/>
    
    </connectionStrings>
    

    我希望能帮到你!

  • 2

    您当前的数据源(LocalDB)\ v11.0是一个特殊的,孤立的SQLServer 2012实例,名为V11.0就足够奇怪了 . (localDb)与您的计算机上的SqlExpresss或任何其他SqlServer的实例不同 . 但是,即使使用不同版本的SqlServer,它们也可以出现在同一系统上而不会发生冲突 . 当您安装SQLExpress或常规SS或更改任何功能时,您可以选择启用LocalDb . 您也可以将其作为单独的软件包从MS下载 . 可能发生的问题是版本不匹配 . 我已经看到建议使用(LocalDb)\ MSSQLLocalDB作为通用名称而不是版本号 . 关于SqlExpress,名称字符串可能类似于JPLWIN7 \ SQLEXPRESS,其中JPLWIN7是我自己的Windows机器或本地LAN上的机器上的192.168.1.13 \ sqlexpress等 .

相关问题