接續昨天內容,今天來把最後的資料庫搞定吧~孩子就快生出來了加油!
首先要在昨天已經申請好的Azure帳戶建立SQL資料庫,步驟如下:
在Azure服務中找到「SQL資料庫」並點選進入。
點選左上角「建立」or 按中間的「建立SQL資料庫」
如下圖紅框所示,需確認訂用帳戶與選擇資源群組,這邊選擇與網站部屬相同的資源群組;然後輸入資料庫名稱(自訂),輸入後要選取伺服器,第一次建立就點選「建立新的」。不過我們主要會用到的是建立後的伺服器,新建的資料庫不會用到,這後面會再說明。
參考下圖輸入伺服器名稱(自訂不能重複)、位置(自行選擇)、驗證方法(使用SQL驗證),並設定伺服器管理員登入的帳號與密碼,完成後按「確定」。
接著可以設定「計算+儲存體」內容,這邊Azure會依照設定的使用量和資料庫大小預估費用,不過因為免費的帳戶本身有送一些點數可以使用,所以目前不用擔心花到錢,這邊我們就維持預設的方案吧!
按下「檢閱+建立」,確認建立資料無誤後,點選「建立」即會開始進行資料庫部署,等待部署完成就可以了。
部署完成如下圖所示,點擊「前往資源」可以查看資料庫概況。
接著需設定防火牆權限,此步驟是為了可以於SSMS登入使用。
點擊「設定伺服器防火牆」,依照下圖紅框所示加入電腦IP位址,按下「儲存」即完成權限設定。
Azure環境部署完成後,接著要下載 SQL Server Management Studio (SSMS),我們要用來將原本的資料庫檔案(Local DB)附加至Azure資料庫內。
可點選以下連結進行下載:
https://learn.microsoft.com/zh-tw/sql/ssms/download-sql-server-management-studio-ssms?view=sql-server-ver16
安裝流程就不多提了,安裝完成後操作步驟參考如下:
在程式集找到「Microsoft SQL Server Management Studio 18」程式並開啟。
開啟後會要求須先連線伺服器,這邊直接選擇預設伺服器與使用Windows驗證,點擊「連線」。
連線成功後就可以看到在左邊物件總管內,有系統內建的資料庫出現啦~
完成後先別急著關掉,接下來要準備加入Local DB了。
接著來將原本的DB檔案附加至內建資料庫,藉此可以發佈到Azure上,步驟如下:
打開網站專案,找到存放DB檔案的App_Data資料夾,按右鍵選擇「在檔案總管中開啟資料夾」。
接著把裡面的資料庫檔案和log檔複製一份,貼上到D槽最外層部分(D:\
),後面步驟說明為何會這樣做。
回到SSMS畫面,在物件總管「資料庫」地方點擊滑鼠右鍵,按「附加」。
進入附加資料庫畫面,點「加入」。
找到剛才複製Local DB檔案放置的路徑,選擇檔案並按下「確定」。這邊我自己測試發現如果路徑太多層的話,會找不到裡面的資料夾和檔案= =,所以才放到D槽最外層,但詳細原因為何還需要研究,如果有知道原因的朋友們可以回饋一下~
確認要附加的資料庫後,再次按下「確定」。
這時就可以看到Local DB 已經成功附加啦~
※補充:
如果在附加時出現失敗,訊息為「無法開啟實體檔案 "D:\dbShoppingCar.mdf"。作業系統錯誤 5: "5(存取被拒。)"。 (Microsoft SQL Server, 錯誤: 5120)」
,或者是附加後的資料庫在名稱後面有顯示「唯讀」,代表可能原本Local DB放置的資料夾本身權限不夠,無法執行修改or寫入。可以選擇修改資料夾權限或者將Local DB移到權限足夠的資料夾,附加後修改資料庫唯讀屬性為False
即可。
詳細可以參考以下文章說明:
https://dotblogs.com.tw/kevinya/2014/08/08/146205
發佈至Azure的步驟如下:
在附加的資料庫上按右鍵,選擇「工作」→點選「將資料庫部署到 Microsoft Azure SQL Database」。
開始作業,點選「下一步」。
設定伺服器連接,點選「連接」後,會跳出登入伺服器視窗,輸入之前在Azure SQL建置的伺服器名稱、帳密,完成後按下「連線」。如果這邊有被擋掉不能連的話,可能需要回去Azure檢查加入防火牆設定是否有完成。
連線成功後會顯示在Azure Database的設定資訊,按「下一步」。
確認來源與目標資料庫,按下「完成」即會開始匯入資料庫到Azure。
作業完成後,按下「關閉」。
最後需要來重新使用Entity Framework將資料庫選擇為Azure SQL,來取代原本的Local DB,步驟如下:
比照我們講過的Entity Framework操作流程,先在Model資料夾內新建一個ADO.NET模型,命名為「ShoppingCarAzure」好了~
選擇「來自資料庫的EF Designer」,然後按「下一步」。
按「新增連接」後會跳出連接屬性視窗,輸入伺服器名稱與登入帳密後,在下面下拉式選單會自動顯示該伺服器有的資料庫名稱,如果沒出現也可以手動輸入資料庫名稱。
確認要使用的資料連結為Azure的之後,選擇「是,在連接字串中包含敏感性資料」,另外將建立實體命名為「dbShoppingCarAzureEntities」,以和原本的Local DB做為區別,完成後按「下一步」。
勾選模型要包含的資料表,另外也將模型命名空間命名為「dbShoppingCarAzureModel」作區別,然後按下「完成」即會開始建立新的DB實體模型。
因為專案要改使用的新建立的Azure資料庫實體了,所以在HomeController
與MemberController
下的db
物件要改成如下:
dbShoppingCarAzureEntities db = new dbShoppingCarAzureEntities();
另外新建的Model在各資料表class的屬性會是沒有添加任何驗證Attribute的狀態,可以比照DAY 14內容將其加回去。
再次將網站專案發布至Azure,執行後發現就可以正確顯示首頁畫面啦~
※如果仍有發生錯誤,且畫面上有出現一組IP,將該IP加入防火牆權限後,應該就可以正常執行了。
發佈成功後可以再測試一下各網頁功能是否正常,另外也可以自行再添加更多功能讓網頁變得更豐富,到此我們就算是完成了一個小小的作品啦~網站實作的介紹就到這,明天開始來補充一些ASP .NET MVC相關的知識,那就明天見~
你好
我是菜鳥工程師
謝謝你的教學 非常實用 對我幫助很大
我有個問題想問
如果SQL都已經發佈到網路上之後
我如果要新增OrderDetail的欄位是出貨和結案
要怎麼做?
雖然我沒有實際操作過,但可以試試下面方式:
使用 Azure 入口網站
登入 Azure 入口網站並導航至您的 Azure SQL Database 資源。
在資源概觀頁面中,選擇「Query editor (預覽版)」選項。
在 Query editor(查詢編輯器) 中,輸入您的 ALTER TABLE 陳述式,並點擊「Run」按鈕以執行該陳述式。您可以在下方查看執行結果和錯誤訊息。
您好,正跟著步驟做
文中提及因有免費帳戶的點數(200USD,效期30天內),故先不用考慮到花費
請問