2020年3月30日 星期一

[研究][IIS]服務應用程式集區的處理序與windows處理序啟用服務的通訊發生嚴重錯誤處理序識別碼為資料欄位包含錯誤號碼

[研究][IIS]服務應用程式集區的處理序與windows處理序啟用服務的通訊發生嚴重錯誤處理序識別碼為資料欄位包含錯誤號碼

2020-03-30






一般這是使用的元件的問題,找出來換掉就可解決。

(完)

2020年3月20日 星期五

[研究][ASP.NET][WebForm] 日期 正規表示式驗證 RegularExpressionValidator

[研究][ASP.NET][WebForm] 日期 的 正規表示式驗證 RegularExpressionValidator

2020-03-20
2020-03-26 更新

注意,各種語言 (C#、JavaScript、PHP、、、) 的規則運算式的規定不保證完全相同。


<asp:TextBox ID="MyDateTextBox" runat="server" Text='<%# Bind("MyDate") %>' CssClass="date" AutoComplete="Off" />

<asp:RequiredFieldValidator ID="RequiredFieldValidator_MyDateTextBox" ControlToValidate="MyDateTextBox" runat="server" ErrorMessage="必填" ForeColor="Red" ValidationGroup="InsertGroup" Display="Dynamic"></asp:RequiredFieldValidator>

<asp:RegularExpressionValidator ID="RegularExpressionValidator1" ControlToValidate="MyDateTextBox" runat="server" ErrorMessage="日期格式錯誤" ForeColor="Red" ValidationExpression="(19|20)[0-9]{2}[- /.](0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])" ValidationGroup="InsertGroup" Display="Dynamic"></asp:RegularExpressionValidator>

<asp:CompareValidator ID="CompareValidator1" ControlToValidate="MyDateTextBox" runat="server" ErrorMessage="日期不合理" ForeColor="Red" Operator="DataTypeCheck" Type="Date" ValidationGroup="InsertGroup" Display="Dynamic"></asp:CompareValidator>


把兩個 Validator 的 Display 屬性設定為 Dynamic 錯誤訊息就不會偏移了

檢查日期型態 (YYYY/MM/DD)
(19|20)[0-9]{2}[- /.](0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])

檢查日期型態 (YYYY/MM/DD、YYYY/MM/D、YYYY/M/DD、YYYY/M/D )
(19|20)[0-9]{2}[- /.]([1-9]|0[1-9]|1[012])[- /.]([1-9]|0[1-9]|[12][0-9]|3[01])

年限制 1900~2099年,月限制1~12月,或01~12月,日限制 1~31或01~31。

CompareValidator 檢查是否合理,例如:2020/03/31 是不合理的。

只能輸入長度為3的字符:「^.{3}$」

********************************************************************************
.cs 可以用這樣檢查資料是否可以轉成日期格式,但是能轉換的資料可能超乎一般的想像,
例如輸入:1、100、1/1、2020、、、有些看起來不像年月日的,可能都可以轉換,不是很建議。

DateTime temp;
if (DateTime.TryParse(myDate, out temp))
{
 
}
else
{
    Label_ExportImportMSG.Text = "<font color=red>「完成日期」填寫的非日期格式資料。</font>";
    return;
}


********************************************************************************

在 .cs 中可以這樣寫

// 檢查「日期」格式 YYYY/MM/DD,YYYY/M/D 不行
                            string regularExpressions = @"^([2][0]\d{2}\/([0]\d|[1][0-2])\/([0-2]\d|[3][0-1]))$|^([2][0]\d{2}\/([0]\d|[1][0-2])\/([0-2]\d|[3][0-1]))$";

// YYYY/MM/DD、YYYY/MM/D、YYYY/M/DD、YYYY/M/D 都可以,但 9999/9/99 會過
// 2020/3/1 上午 12:00:00 實際測試也會過 ( Why ?) DateTime.TryParse 得到相同值;插入 SQL Server 會出現【從字元字串轉換成日期及/或時間時,轉換失敗。】錯誤,要想辦拿拿掉【上午】兩字
                            // string regularExpressions = @"^(\d{4}(?:/\d{1,2}){2})";

Match  m = Regex.Match(myDate, regularExpressions);

                        if (m.Success)
                        {
                            //return true;
                        }
                        else
                        {
                            Label_ExportImportMSG.Text = "<font color=red>格式為YYYY/MM/DD,例如:2020/1/1請填寫2020/01/01。</font>";
                            return;
                        }

********************************************************************************

結合使用,在 .cs 中可以這樣寫

protected void Button1_Click(object sender, EventArgs e)
        {
            //string regularExpressions = @"^([2][0]\d{2}\/([0]\d|[1][0-2])\/([0-2]\d|[3][0-1]))$|^([2][0]\d{2}\/([0]\d|[1][0-2])\/([0-2]\d|[3][0-1]))$";
            string regularExpressions = @"^(\d{4}(?:/\d{1,2}){2})";
            string myDate = TextBox1.Text.Trim();
            Match m = Regex.Match(myDate, regularExpressions);
            if (m.Success)
            {
                Label1.Text = "Ok";
                DateTime temp;
                if (DateTime.TryParse(myDate, out temp))
                {
                                //mainlandPurchaseDate=temp.ToString("yyyy/MM/dd HH:mm:ss");
                                // Excel 儲存格格式若為【日期】,ClosedXML 對「2020/3/1」回傳「2020/3/1 上午 00:00:00」
                                // Excel 儲存格格式若為【文字】,ClosedXML 對「2020/3/1」回傳「2020/3/1」
                                // 插入 SQL Server 會出現【從字元字串轉換成日期及/或時間時,轉換失敗。】錯誤,要想辦拿拿掉【上午】兩字
                                mainlandPurchaseDate = temp.ToString("yyyy/MM/dd");
                }
                else
                {
                    Label1.Text = "<font color=red>「完成日期」填寫日期不合理。</font>";
                    return;
                }
            }
            else
            {
                Label1.Text = "<font color=red>「完成日期」填寫的非日期格式資料。</font>";
                return;
            }
        }
            


(完)

相關

[研究] [C#] [ASP.NET] 除去日期格式中的 "上午"、"下午"
http://shaurong.blogspot.com/2017/01/c-aspnet.html

Regex 類別
https://docs.microsoft.com/zh-tw/dotnet/api/system.text.regularexpressions.regex?view=netframework-4.8

Regex.IsMatch 方法
https://docs.microsoft.com/zh-tw/dotnet/api/system.text.regularexpressions.regex.ismatch?view=netframework-4.8

規則運算式語言 - 快速參考
https://docs.microsoft.com/zh-tw/dotnet/standard/base-types/regular-expression-language-quick-reference

規則運算式範例:變更日期格式
https://docs.microsoft.com/zh-tw/dotnet/standard/base-types/regular-expression-example-changing-date-formats

如何確認字串是否為有效的電子郵件格式
https://docs.microsoft.com/zh-tw/dotnet/standard/base-types/how-to-verify-that-strings-are-in-valid-email-format

2020年3月17日 星期二

[研究][ASP.NET][WebForm] 倒數計時

[研究][ASP.NET][WebForm] 倒數計時

2020-03-17

Default.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" 
Inherits="WebApplication1.Default" %>
<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
        <asp:ScriptManager runat="server" />
        <asp:UpdatePanel runat="server">
            <ContentTemplate>
                <asp:Timer ID="Timer1" runat="server" OnTick="Timer1_Tick"></asp:Timer>
                <asp:Label ID="timeLabel" runat="server"></asp:Label>
            </ContentTemplate>
        </asp:UpdatePanel>
    </form>
</body>
</html>


Default.aspx.cs
using System;
namespace WebApplication1
{
    public partial class Default : System.Web.UI.Page
    {
        private static int timeLeft = 100000;
        protected void Page_Load(object sender, EventArgs e)
        {
            Timer1.Interval = 1000;//設定每秒執行一次
            Timer1.Enabled = true;
        }

        protected void Timer1_Tick(object sender, EventArgs e)
        {
            if (timeLeft > 0)
            {
                timeLeft = timeLeft - 1;
                timeLabel.Text = timeLeft + " seconds";
            }
            else
            {
                Timer1.Enabled = false;
                timeLabel.Text = "Time's up!";
            }
        }
    }
}


(完)

2020年3月14日 星期六

[研究] Windows Server 2019 不同版本 Windows Update 測試

[研究] Windows Server 2019 不同版本 Windows Update 測試

2020-03-14


Windows Server 2019 (x64) - DVD (Chinese-Traditional)(2018-11-02)


********************************************************************************
Windows Server 2019 (updated Feb 2020) (x64) - DVD (Chinese-Traditional)(2020-03-03)


https://www.catalog.update.microsoft.com/Search.aspx?q=4538461

This update has been replaced by the following updates:
n/a
This update replaces the following updates:
2018-10 適用於 x64 系統 Windows Server 2019 (1809) 的累積更新 (KB4464330)
2018-10 適用於 x64 系統 Windows Server 2019 的累積更新 (KB4464455)
2018-11 適用於 x64 系統 Windows Server 2019 的累積更新 (KB4467708)
2018-11 適用於 x64 系統 Windows Server 2019 的累積更新 (KB4469342)
2018-12 適用於 x64 系統 Windows Server 2019 的累積更新 (KB4471332)
2018-12 適用於 x64 系統 Windows Server 2019 的累積更新 (KB4483235)
2019-01 適用於 x64 系統 Windows Server 2019 的累積更新 (KB4476976)
2019-01 適用於 x64 系統 Windows Server 2019 的累積更新 (KB4480116)
2019-02 適用於 x64 系統 Windows Server 2019 的累積更新 (KB4482887)
2019-02 適用於 x64 系統 Windows Server 2019 的累積更新 (KB4487044)
2019-03 適用於 x64 系統 Windows Server 2019 的累積更新 (KB4489899)
2019-03 適用於 x64 系統 Windows Server 2019 的累積更新 (KB4490481)
2019-04 適用於 x64 系統 Windows Server 2019 的累積更新 (KB4493509)
2019-04 適用於 x64 系統 Windows Server 2019 的累積更新 (KB4495667)
2019-05 適用於 x64 系統 Windows Server 2019 的累積更新 (KB4494441)
2019-05 適用於 x64 系統 Windows Server 2019 的累積更新 (KB4497934)
2019-05 適用於 x64 系統 Windows Server 2019 的累積更新 (KB4501835)
2019-05 適用於 x64 系統 Windows Server 2019 的累積更新 (KB4505056)
2019-06 適用於 x64 系統 Windows Server 2019 的累積更新 (KB4501371)
2019-06 適用於 x64 系統 Windows Server 2019 的累積更新 (KB4503327)
2019-06 適用於 x64 系統 Windows Server 2019 的累積更新 (KB4509479)
2019-07 適用於 x64 系統 Windows Server 2019 的累積更新 (KB4505658)
2019-07 適用於 x64 系統 Windows Server 2019 的累積更新 (KB4507469)
2019-08 適用於 x64 系統 Windows Server 2019 的累積更新 (KB4511553)
2019-08 適用於 x64 系統 Windows Server 2019 的累積更新 (KB4512534)
2019-09 適用於 x64 系統 Windows Server 2019 的累積更新 (KB4512578)
2019-09 適用於 x64 系統 Windows Server 2019 的累積更新 (KB4516077)
2019-09 適用於 x64 系統 Windows Server 2019 的累積更新 (KB4522015)
2019-10 適用於 x64 系統 Windows Server 2019 的累積更新 (KB4519338)
2019-10 適用於 x64 系統 Windows Server 2019 的累積更新 (KB4520062)
2019-10 適用於 x64 系統 Windows Server 2019 的累積更新 (KB4524148)
2019-11 適用於 x64 系統 Windows Server 2019 的累積更新 (KB4523205)
2019-12 適用於 x64 系統 Windows Server 2019 的累積更新 (KB4530715)
2020-01 適用於 x64 系統 Windows Server 2019 的累積更新 (KB4534273)
2020-01 適用於 x64 系統 Windows Server 2019 的累積更新 (KB4534321)
2020-02 適用於 x64 系統 Windows Server 2019 的累積更新 (KB4532691)
2020-02 適用於 x64 系統 Windows Server 2019 的累積更新 (KB4537818)

它取代了很多舊版更新,所以【解除安裝更新】目前看到的 hotfix 很少。
其他 KB 情況也類似。

(完)