更改 SQL Server 定序

在Azure上開了一個 SQL Server 2019 Developer Edition VM,跟在自己本機安裝最大的不同,就是不能選資料庫定序,這一點對大部分的資料庫沒有甚麼影響,我們可以針對單一資料庫或資料表改變定序,但如果遇到資料庫跟SQL Server定序不一樣的時候,你會發現有用到暫存資料表的預存程式會出現Exception。

System.Data.SqlClient.SqlException: ‘Cannot resolve the collation conflict between ” Chinese_Taiwan_Stroke_CI_AS ” and “SQL_Latin1_General_CP1_CI_AS” in the equal to operation.’

SQL Server 預設定序是SQL_Latin1_General_CP1_CI_AS,但在台灣習慣是用Chinese_Taiwan_Stroke_CI_AS,所以這次我就試著來改資料庫的定序,也把成果分享給同樣困擾的網友們。

最重要的一點就是資料庫要先備份,很重要所以要講三次,因為資料真的會不見。

首先,我們使用cmd (run as administrator) 進入 SQL Server 的資料夾,像我就是 C:\Program Files\Microsoft SQL Server\150\Setup Bootstrap\SQL2019> 然後執行這一行指令

Setup /QUIET /ACTION=REBUILDDATABASE /INSTANCENAME=資料庫實體 /SQLSYSADMINACCOUNTS=帳號 /SAPWD=密碼 /SQLCOLLATION=Chinese_Taiwan_Stroke_CI_AS

資料庫實體的名稱,我在過程中搞錯好幾次,不是Localhost..等等 SSMS 連線的名稱喔,你可以在 C:\Program Files\Microsoft SQL Server\150\Setup Bootstrap\Log 的Summary.txt 查得到。

以上,我把資料庫的定序改過來了,而且包含建立暫存資料表的預存程式也執行正確。

參考文章

五餅二魚工作室
[SQL][問題處理]如何改變已存在資料庫的定序 ?
https://dotblogs.com.tw/jamesfu/2016/12/10/Change_Database_Collate

設定或變更伺服器定序
https://docs.microsoft.com/zh-tw/sql/relational-databases/collations/set-or-change-the-server-collation?view=sql-server-ver15

Godaddy IIS 10 手動安裝SSL 憑證備忘

由於 SSL 不常安裝,每次都要稍微想一下,但是客戶常常都是等到過期了才急著要安裝,所以我把步驟紀錄一下,以避免出錯及縮短安裝時間。

將 .crt 檔案轉換為 .cer 檔案

  • 找到您下載的 .crt 檔案,然後點兩下開啟。
  • 點選「詳細資訊」分頁標籤,然後點選「複製到檔案」按鈕。
  • 點選憑證精靈內的「下一步」。
  • 點選「Base-64 encoded X.509(.CER)」,然後點選「下一步」。
  • 點選「瀏覽」並指定您想儲存 .CER 檔案的位置,然後為憑證輸入名稱。
  • 點選「下一步」,然後點選「完成」。

接下來的步驟,官方文件寫得還滿清楚的,就不用多寫了

參考官方文件:https://tw.godaddy.com/help/manually-install-an-ssl-certificate-on-my-iis-10-server-27349

ASP.NET Core 3.0 登入機制實作(claims-based authentication)

我們開新專案時,專案範本可以選擇「個別使用者帳戶」驗證方式,這時候專案就會有登入的機制了,但是很多工程師都不這麼用,理由是:
1. 他是 core first 的方式,不是它們習慣的 db first。
2. 要客製化時要改很多code,感覺太麻煩。

不過有個時機可能會用到他,就是要整合第三方登入機制,如Facebook, Twitter..等等,因為只要設定一下,就可以了。

可以參考: https://docs.microsoft.com/zh-tw/aspnet/core/security/authentication/identity?view=aspnetcore-3.0&tabs=visual-studio

閱讀全文〈ASP.NET Core 3.0 登入機制實作(claims-based authentication)〉

ASP.NET Core 3.0 靜態檔案(Static Files)

在開發 ASP.NET MVC 5 時,css、fonts、js…等等的靜態檔案(Static Files),都是放在專案裡頭的 Content 的資料夾,但是在開發 ASP.NET Core 3.0 的時候,我們特別要注意的是,要必須 把HTML 所用到的靜態檔案放到 wwwroot 裡頭。

參考附圖中 wwwroot 資料夾及網頁相對路徑

ASP.NET Core 3.0 (Preview 7) 建立 Web 應用程式

使用 .NET Core 3.0 已經一陣子了,最早我是用 .NET Core 3.0 (Preview 5) 寫了公司的內部系統,剛開始不熟,直接在Controller 打預存程式回傳 ViewModel 的格式,直接給 Razor 來用,若以小型專案來說,算是一個滿有效率的解決方案。

目前開發 .NET Core 3.0 時,要使用 Visual Studio 2019,我目前的 版本 16.1.6。
另外安裝 .NET Core 3.0 的 SDK,下載連結: https://dotnet.microsoft.com/download/dotnet-core/3.0 ,可以下載 Preview 7 版

先來說明安裝後,如何開新專案

閱讀全文〈ASP.NET Core 3.0 (Preview 7) 建立 Web 應用程式〉

ASP.NET MVC ALERT訊息做法

這是一個簡單的問題,說明如下

Step01. 在Action中設定 TempData[“message”] = “此帳號已被註冊”;

[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Register(RegisterViewModel model)
{
    if (ModelState.IsValid)
    {
          var user = await UserManager.FindByNameAsync(model.UserName);

       if (user != null)
       {
            //TempData 只會被讀一次,之後就會失效
            TempData["message"] = "此帳號已被註冊";
            return View(model);
       }else
       {
            //執行註冊
            //完成後,轉頁
       }
     }
       return View(model);
}

Step02.在 _layout.cshtml 中判斷 TempData[“message”] 有沒有值,有值就出現alert

<!DOCTYPE html>
<html lang="zh-TW">
<head>
 @if (TempData["message"] != null)
{
    <script type="text/javascript">
        var message = @Html.Raw(Json.Encode(TempData["message"]));
        alert(message);
    </script>
}
</head>
<body>
   @RenderBody()
</body>
</html>