cnn.Open();
using (StreamReader reader = new StreamReader(@"C:/Users/jhogan/Documents/Test Folder/test_import.csv"))
{
while (!reader.EndOfStream)
{
var line = reader.ReadLine();
if (lineNumber != 0)
{
var values = line.Split(',');
var date = values[0];
var sentDate = DateTime.ParseExact(date, "yyyy-MM-dd hh:mm:ss", CultureInfo.InvariantCulture);
await cnn.ExecuteAsync(insertFeedback, new {
@SentDate = sentDate, @RatedDate = values[1], @Rating = values[2], @Location = values[3], @Notes = values[4], @Email = values[5], @Feedback = values[6] },commandTimeout: 120,commandType: CommandType.StoredProcedure);}
我正在嘗試將此資料從 csv 檔案加載到我的資料庫中,但我遇到了標題中的以下錯誤。我的 csv 中日期的原始格式是 HH:MM:SS PM/AM,我在資料庫中的列型別是 datetime。在我的資料庫中,日期時間格式為 YYYY-MM-DD HH:MM:SS:MMM。我認為這是因為資料庫的格式,但我真的不確定。
uj5u.com熱心網友回復:
我在資料庫中的列型別是日期時間。在我的資料庫中,日期時間格式為 YYYY-MM-DD HH:MM:SS:MMM。
您誤解了資料庫和 .Net DateTime 值的作業方式。如果列型別或資料型別為DateTime,則資料庫或記憶體中的格式為binary,當您看到時YYYY-MM-DD HH:MM:SS:MMM,這只是您的工具為您提供的便利。無需嘗試將您的字串與該內部二進制格式匹配。
hh但就代碼而言,問題在于格式字串中的小寫。我們可以在檔案中看到,小寫字母h代表 12 小時時間,大寫字母H代表 24 小時時間。查看2022-04-14 13:03:12問題標題中錯誤的輸入字串,我們13在這個位置有一個,這肯定會讓您處于大寫H區域:
var sentDate = DateTime.ParseExact(date, "yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture);
但比這更糟糕。我也在評論中看到了這一點:
第一行是 2022 年 4 月 14 日下午 1:03:12
所以首先,格式字串DateTime.ParseExact()告訴原始輸入源字串的格式,而不是決議值的目標格式,畢竟它是二進制的,無論如何都不是人類可讀的。
決議該值的格式字串如下所示M/dd/yyyy h:mm:ss tt:還要注意在某些位置使用成對字符和單個字符。
var sentDate = DateTime.ParseExact(date, "M/dd/yyyy h:mm:ss tt", CultureInfo.InvariantCulture);
但這里真正的意義是問題標題中的錯誤和評論之間的差異意味著您可能有多種格式。這很可怕。DateTime.ParseExact()使用嚴格的決議。如果輸入與預期格式不完全匹配,您將收到例外。
幸運的是,接受多個格式字串的方法有一個多載。但是,即使有這種過載,您也可能需要花時間查看 csv 資料并確保考慮到資料中的每種可能格式。
如果這個領域的資料可以由隨機的人輸入,愿上帝憐憫你的靈魂。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/466825.html
上一篇:SQL讀取多個表并自連接
