2009-04-13 74 views
5

我一直在開發一個ASP.NET WebForms應用程序,需要帳戶登錄功能(例如註冊新用戶,更改密碼,恢復密碼,配置文件,角色等) 。爲此,我將FormsAuthentication與默認數據存儲一起使用,令我驚訝的是,它是App_Data中的一個MDF文件。實際部署此應用程序時。在網上生活,我會用GoDaddy或其他廉價公司的共享主機。App_Data/ASPNETDB.MDF到Sql Server 2005(或08)

爲了提高效率,我想從這個MDF切換到實際的SQL Server 2005或2008(他們正確使用平面文件?)。然而,共享主機,我不能運行任何程序,如aspnet_regsql.exe。我只需將一個登錄名和密碼登錄到SQL Server數據庫,並將FTP帳戶登錄到域根目錄中。沒有MSTSC遠程桌面,沒有控制檯訪問,沒有在IIS中修補等。

我不需要從ASPNETDB.MDF(網站將從零用戶開始)傳輸任何用戶帳戶,但我怎麼想到:

1)當我使用Web Site Administration Tool開始使用FormsAuthentication時,輕鬆創建Visual Studio在ASPNETDB.MDF中自動創建的表,過程等等?

2)讓SQL成員資格提供程序使用連接字符串我給它,而不是使用它現在連接到此ASPNETDB.MDF。地獄,我甚至沒有在web.config中看到任何連接字符串到這個MDF;地獄是我的應用程序。甚至找到它? Machine.config中?如果是這樣,那將是一個糟糕的決定。這個幕後的廢話讓我瘋狂。

經過此遷移的人的任何幫助將非常非常感謝!

回答

4

.mdf不是一個平面文件。它是一個SQL Server Express數據庫文件。

有時是最好不要開車一條土路上一輛保時捷...;)

我建議得到一個專用的服務器,如果你要舉辦一個網站,一個嚴重的後端。共享主機從管理角度來看有限制。

用於查找SQL表表達,有一個名爲「管理工作室」工具附帶與SQL Server EE應該讓你得到在密度纖維板等

下面的表是一個例子一個連接字符串到您的web.config中.mdf

<connectionStrings> 

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

</connectionStrings> 

我同情你的沮喪。建立和託管一個複雜的網站並非易事。通常運行嚮導來配置Web應用程序是一個壞主意,除非您正在學習Web應用程序。你需要超越這個抽象層次,並學習更多有關如何手動配置/重寫會員供應商等,如果你要專業主持。

希望這會指出你在正確的方向。祝你好運;)

+0

您還應該能夠通過Visual Studio訪問mdf。 – Konrad 2009-04-13 06:03:44

1

MDF實際上並不是一個平面文件數據庫,它使用SQL Express引擎與user instances,因此它可以實時附加數據庫。此引擎是SQL Server的有限版本,但限制相當高,所以除非您擁有繁忙的站點,否則不會成爲問題。從here,限制是...

  • 的企業級功能缺乏支持
  • 限於一個CPU一GB內存
  • 限制緩衝池數據庫
  • 有4 GB的最大尺寸

連接字符串應該是在你的web.config中,搜索「AttachDbFileName」(不含引號)。欲瞭解更多信息,請參閱here

如果您的託管軟件包中包含完整的SQL,通常託管公司會爲您提供一個Web工具來將MDF文件(通過指定它的路徑)附加到完整的SQL服務器實例。您可以將MDF文件保留在app_data文件夾中(因爲該文件夾的權限設置可防止匿名用戶下載數據庫文件)。

一旦連接到使用SQL Server標準實例(或其他版本)而不是SQL Express用戶實例,只需更改web.config文件中的連接字符串以指向使用Web工具配置的數據庫實例而不是使用SQL Express的「自動附加」功能。

請參閱here爲godaddy說明。

3

有些細節會根據您的託管服務提供商是不同的,但是:

  1. 如果您還沒有這樣做的話,請下載並安裝Microsoft SQL Server Management Studio Express

  2. 你的託管服務提供商必須爲您提供管理員連接信息連接到你的SQL服務器實例。有了這些信息,請確認您可以使用MSSMSE進行連接。如果你不能,那麼其​​餘的都不會有問題。

  3. 轉到此weblog並按照步驟創建所需的數據庫腳本以將數據庫移至生產。這些腳本可以在MSSMSE的查詢窗口中運行。

  4. 通常情況下,您的連接字符串將存儲在Web.Config文件中。連接字符串。如果像你在你的問題中說的那樣,你不想使用「AttachDbFilename =」風格,那麼你已經轉移到了完整的SQL Server。您的連接字符串看起來更像這樣:

    < add name =「myConnectionName」connectionString =「Data Source = myServerAddress; Initial Catalog = myDataBase; User Id = myUsername; Password = myPassword;」 >

-2

這是很容易的,如果你開始新的數據

做我跑了「C:\ WINDOWS \ Microsoft.NET \框架\ V2.0.50727 \一spnet_regsql -C *數據來源= localhost; Initial Catalog = MYDB; Persist Security Info = True; User ID =; Password = **;「 * -A all「將ASP.NET成員資格表和sprocs包含到我選擇的數據庫中。如果你這樣做,請確保你覆蓋默認的LocalSQLServer連接字符串,或者它不會在web.config中找到像這樣的數據庫你的asp。淨網站

<的ConnectionStrings > <清晰/ > <添加名稱= 「LocalSqlServer」 這個的connectionString =「數據源=本地主機;初始目錄= MYDB;堅持安全信息= TRUE;用戶ID = **;密碼= * ***;」 providerName =「System.Data.SqlClient」/ >

+0

你不是在讀問題中的所有內容嗎? Quote:*我不會能夠運行像aspnet_regsql.exe *任何程序。 – awe 2009-11-12 07:55:42

4

該MDF文件是一個SQL Server數據庫。所有SQL Server版本(CE除外)使用相同的文件格式,因此MDF可以由任何其他SQL Server使用sp_attach_db或SSMS打開,請參閱How to: Attach a Database (SQL Server Management Studio).。一旦連接到SQL Server,SSMS可以編寫整個數據庫的腳本,請參閱How to: Generate a Script (SQL Server Management Studio)。這也可以用編程方式完成,使用SMO Scripter對象。 SSMS腳本將包含數據庫中的所有表,索引,過程和其他所有對象。還有一個Import and Export Wizard in SSMS,您可以使用它將您的表格內容(任何數據)導出到CSV文件中,然後將此CSV文件導入您的託管數據庫,但該導入/導出嚮導相當複雜(使用SSIS)。

數據導出的另一種替代方法是使用bcp實用程序,請參閱Bulk Import and Bulk Export Operations

從技術上講,您可以使用SQL環境中的SQL Server Express實例,使用命令行工具(如sqlcmd和bcp)以及編寫自己的SMO Scripter應用程序導出數據庫模式來完成所有這些操作。但是,它需要一定程度的經驗。使用完全成熟的Managent Studio可輕鬆訪問所有要在託管站點導入的數據。

不要忘記與你的提供商檢查,如果他們允許恢復或附加自己的數據庫,那麼你可能容易與只是一個文件副本提供商。

請注意,您的MDF文件只能將其附加到與您創建的SQL Server至少相同版本的SQL Server。您的VS環境包含一個SQL Server,可能名爲SQLEXPRESS,您必須檢查它是什麼版本。比你的VS SQL實例版本更早的版本的服務器將拒絕附加你的MDF文件,因爲它的格式不能識別。按照KB 321185中的步驟確定VS環境具有的SQL Server版本。

更新

我不知道VS有一個導出嚮導。只要按照他提供的步驟Gary mentions in the link即可。