簡體   English   中英

使用.mdf數據庫發布ASP.NET項目

[英]Publish ASP.NET project with .mdf database

我有一個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.Aconf上的System.Security.CodeAccessSecurityEngine.Check(Object demand,StackCrawlMark&stackMark,Boolean isPermSet)處的System.Security.Andine.Check(PermissionSet permSet,StackCrawlMark和stackMark)處於System.Security.PermissionSet.Demand()處。 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,TaskCompletionSource 1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection) at System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource布爾值allowCreate,Boolean onlyOneCheckConnection,DbConnectionOptions userOptions,DbConnectionInternal&connection) System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection outerConnection,DbConnectionFactory connectionFactory) 1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection) at System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource 1重試,DbConnectionOptions userOptions,DbConnectionInternal&connection) ,TaskCompletionSource 1 retry, DbConnectionOptions userOptions) at System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource 1重試)處於System.Data.SqlClient.SqlConnection.Open()處於Database.establishConnection()失敗的操作是:Demand類型失敗的第一個權限是:System.Security.PermissionSet失敗的程序集的區域是:MyComputer

為什么不將數據庫發布為腳本而不是.mdf它比使用.mdf更穩定!

使用SQL管理工作室映像

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

並且由於它是安全要求的服務器,您需要設置密碼,用戶,角色等。除了這些要求,對於ASP.NET或通常在WWW解決方案上這么多主機提供商不支持自動將數據庫解決方案自動附加到他們的DB服務器..

因此,當您選擇在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 ..也檢查這個..

發現類似的問題http://www.codeproject.com/Questions/677651/How-to-publish-mdf-database-file-into-a-asp-net-我們有一個解決方案,希望它有所幫助。

你可以試試這個。

   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>

我希望能幫到你!

您當前的數據源(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等。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM