2017-04-17 181 views
-6

我遇到了一個問題,試圖將字符串轉換爲DateTime。我嘗試了幾件事情,但在嘗試更新記錄時不斷收到錯誤。將字符串轉換爲DateTime C#ASP.NET

string consentGiven = ConsentGivenDate.Text; 
DateTime date1 = Convert.ToDateTime(consentGiven); 
cmd.Parameters.Add(new SqlParameter("@ConsentGivenDate", date1)); 

if ((ConsentGivenDate.Text == "dd/mm/yyyy")) 
    cmd.Parameters.Add("@ConsentGivenDate", SqlDbType.DateTime).Value = DBNull.Value; 
else 
    cmd.Parameters.Add("@ConsentGivenDate", SqlDbType.DateTime).Value = ConsentGivenDate.Text; 

我已嘗試添加一點格式在這樣的日期是在英國的格式爲「DD/MM/YYYY」,但仍然無法將它轉換過來。

我做錯了什麼?

我是一個真正的編碼新手所以道歉,如果這是愚蠢的東西....

+0

如果數據庫中的列是'DateTime',爲什麼要插入一個字符串?只是'cmd.Parameters.Add(「@ConsentGivenDate」,SqlDbType.DateTime).Value = date1' – Pikoh

+1

可能重複[轉換字符串到日期時間使用C#](http://stackoverflow.com/questions/1989342/convert-string -to-日期時間-使用-C-尖銳) –

回答

0

始終使用正確類型的實例在你的SQL參數。如果參數與數據庫架構中的DateDateTime相對應,則相應的.net類型應爲DateTime而不是string

object sqlValue = DBNull.Value; 
DateTime dateConsentGiven; 

if(DateTime.TryParseExact(ConsentGivenDate.Text, "dd/mm/yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out dateConsentGiven)) 
    sqlValue = dateConsentGiven; 
cmd.Parameters.Add("@ConsentGivenDate", SqlDbType.DateTime).Value = sqlValue; 

另外請注意,您多次添加相同的參數在原始的代碼在你的問題,SQL Server使用命名參數,這意味着參數名稱是唯一的。

-1
DateTime dt = DateTime dt=DateTime.ParseExact("ConsentGivenDate.Text", "dd/MM/yyyy", CultureInfo.InvariantCulture); 
cmd.Parameters.Add(new SqlParameter("@ConsentGivenDate", dt)); 
cmd.Parameters.Add("@ConsentGivenDate", SqlDbType.DateTime).Value = DBNull.Value;