[研究][ASP.NET] 用匯入 Excel (.xlsx) 中可不填寫「日期」欄位的處理
2022-11-23
環境:Visual Studio 2022 + ASP.NET + WebForm + Web Application + C#
野人獻曝,僅供參考。
********************************************************************************
MyImport.aspx.cs 中
...(略) // ClosedXML 0.96 completeDateTime = table.Cell(i, 8).Value.ToString(); ...(略) //publicUpdateDateTime = table.Cell(i, 1).Value.ToString(); if (completeDateTime != "") { bool convert = DateTime.TryParse(completeDateTime, out DateTime completeDateTime_DateTime); string completeDateTime_Convert = completeDateTime_DateTime.ToString("yyyy-MM-dd HH:mm:ss"); completeDateTime = completeDateTime_Convert; } else { completeDateTime = null; } errMsg = MyCommon.CheckMyTableRecord( ...(略) completeDateTime, ...(略) ); if (errMsg != "") { //Fortify SCA : Critical : Cross-Site Scripting: Reflected errMsg = "#2匯入.xlsx共" + rowCount + "橫列" + columnCount + "行 (含標題列,若看不到,可能填寫了不可見字元),第" + (i - 1) + "筆 (Excel 第" + i.ToString() + "橫列)匯入失敗。\\n" + errMsg; errMsg = Common.MyAntiXssFilter(errMsg); Page.ClientScript.RegisterStartupScript(Page.GetType(), "message", "<script language='javascript' defer>alert('" + errMsg + "');</script>"); Label_MSG1.Text = Common.MyAntiXssFilter(errMsg); Label_MSG1.ForeColor = System.Drawing.Color.Red; return; } queryString = @" INSERT INTO [dbo].[MyTable] ( ...(略) ,[CompleteDateTime] ...(略) ) VALUES ( ...(略) ,@completeDateTime ...(略) ); "; using (SqlConnection connection = new SqlConnection(WebConfigurationManager.ConnectionStrings["連線字串"].ConnectionString)) { SqlCommand command = new SqlCommand(queryString, connection); command.Parameters.Clear(); ...(略) // 參數化查詢 必須有參數 '@completeDateTime',但未提供。 //command.Parameters.AddWithValue("@completeDateTime", completeDateTime); command.Parameters.AddWithValue("@completeDateTime", ((object)completeDateTime ?? DBNull.Value)); ...(略) } |
MyCommon.cs 中
public static string CheckPublic111Record(...略) { ...(略) errMsg += CheckField(false, 255, "完成日期時間", completeDateTimeObject, "date", out completeDateTime); ...(略) } public static string CheckField(bool isRequired, int maxlen, string fieldChineseName, object fieldObject, string fieldType, out string fieldValue) { string errMsg = ""; fieldValue = ""; if (fieldObject != null) fieldValue = fieldObject.ToString().Trim(); if ((isRequired == true) && (fieldValue == "")) { errMsg = "「" + fieldChineseName + "」必填。"; return errMsg; } if (fieldValue.Length >= maxlen) { errMsg = "「" + fieldChineseName + "」內容太長,限" + maxlen.ToString() + "字元。"; return errMsg; } switch (fieldType) { case "string": // break; case "YesNo": if (!((fieldValue == "是") || (fieldValue == "否"))) { errMsg = "「" + fieldChineseName + "」只能輸入「是」或「否」,但您填寫「" + fieldValue + "」。"; return errMsg; } break; case "int": Int32.TryParse(fieldValue, out int fieldValue_Int); if (fieldValue != fieldValue_Int.ToString()) { errMsg = "「" + fieldChineseName + "」必須輸入整數,但您填寫「" + fieldValue + "」。"; return errMsg; } break; case "date": /* 日期和時間 (Transact-SQL) https://msdn.microsoft.com/zh-tw/library/ms187819(v=sql.90).aspx datetime日期範圍:1753 年 1 月 1 日到 9999 年 12 月 31 日 smalldatetime日期範圍:1900 年 1 月 1 日到 2079 年 6 月 6 日 datetime2 (Transact-SQL) https://msdn.microsoft.com/zh-tw/library/bb677335(v=sql.120).aspx 日期範圍:0001-01-01 到 9999-12-31,西元 1 年 1 月 1 日到西元 9999 年 12 月 31 日 */ bool parse = DateTime.TryParse(fieldValue, out DateTime fieldValue_DateTime); if (parse) { fieldValue = fieldValue_DateTime.ToString("yyyy/MM/dd"); } else { if (isRequired == true) { // 必填,一定要符合 datetime errMsg = "「" + fieldChineseName + "」輸入資料無法轉換成日期格式,您填寫「" + fieldValue + "」。"; return errMsg; } else { // 非必填,可以 null fieldValue = null; } } break; } return errMsg; } #endregion 欄位檢查 |
(完)
相關
[研究][ASP.NET][WebForm] 日期 正規表示式驗證 RegularExpressionValidator
http://shaurong.blogspot.com/2020/03/aspnetwebform-regularexpressionvalidator.html
[研究] [C#] [ASP.NET] 除去日期格式中的 "上午"、"下午"
沒有留言:
張貼留言