2014-02-19 45 views
0

我需要一些解析日期的指導。我的數據庫表中包含的值 ID(int)和日期(日期時間:YYYY-MM-DD HH:MM:SS.FFF格式)和狀態 例如從sqlserver解析日期到C#

1000 & 2014-02-18 20:32:20.657 & 1 
2000 & 2014-02-18 20:32:20.658 & 1 
3000 & NULL     & -1 

我有一個C#方案,着眼於該表對於status = 1且日期不爲空,並且希望在文本文件中以相同格式插入ID和Date。 該文本文件應該有

1000 2014-02-18 20:32:20.657 
2000 2014-02-18 20:32:20.658 

這是代碼。

using (SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["SQLConnectionString"].ConnectionString)) 
{ 
    connection.Open(); 
    SqlCommand cmdSel = new SqlCommand(sqlSelNew, connection); 
    SqlDataReader reader1 = cmdSel.ExecuteReader(); 
    while (reader1.Read()) 
    { 
     DataSet ds = GetData(sqlSelNew); 
     CultureInfo _provider = CultureInfo.InvariantCulture; 
     ID = Convert.ToInt32(reader1["ID"].ToString()); 
     string dtformat = @"yyyy/MM/dd HH:mm:ss.fff"; 
     var d = DateTime.ParseExact(dateresized,dtformat , _provider); 
     using (StreamWriter sw = new StreamWriter(txtfilepath, true)) 
     { 
      sw.BaseStream.Seek(0, SeekOrigin.End); 
      sw.WriteLine(ID + " " + d); 
      sw.Flush(); 
      sw.Close(); 
     } 

我得到「字符串未被識別爲有效的日期時間」。錯誤。我該如何處理? 謝謝 Rashmi

回答

4

首先,你不應該解析日期。您應該只需使用reader.GetDateTime()即可讀取該列並對其進行分配。其次,你爲什麼要填寫DataSet並使用SqlDataReader直接獲取值?我期望一個或另一個,但不是兩個。第三,你應該將自己的讀者包裝在using聲明中,因爲它實現了IDisposable

using (var reader1 = cmdSel.ExecuteReader()) 
{ 
    while (reader1.Read()) 
    { 
     var id = reader1.GetInt32(0); 
     var date = reader1.GetDateTime(1); 

     ... 
    } 
} 
+0

我做了上述改動。 txt文件具有不同格式的日期,即1000 2014/2/11 21:04:06 PM而不是2014-02-11 21:04:06.770 – Rashmi

+0

@Rashmi - 您需要在數據輸出上使用格式,而不是在解析輸入,指定你想要的,例如'sw.WriteLine(「{0} {1:yyyy/MM/dd HH:mm:ss.fff}」,id,date);' – tvanfosson