[研究][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] 除去日期格式中的 "上午"、"下午"
沒有留言:
張貼留言