2014-07-09 31 views
-1

請參閱下面的內容,其中數據集從表中返回結果。C# - 使用Streamwriter將文本文件寫入日期時間字段(使用NaNo Second)

數據集返回的列是DATETIME,但具有以下代碼 - NANO秒被寫入文件時被刪除。

對於如 源數據:2014年1月1日01:23:55.596

請告訴我得到寫在文件 輸出數據:2014年1月1日1時23分55秒

所以我想要調整下面的代碼,以便NANO秒也被打印到文件中。

try 
{ 
    using (OleDbConnection connection1 = new OleDbConnection(str_ConnectionString1)) 
    { 
     OleDbCommand command = new OleDbCommand(queryString1, connection1); 
     command.CommandTimeout = 0; 
     connection1.Open(); 
     OleDbDataReader reader1 = command.ExecuteReader(); 

     // This size is just for example purpose. Should be fine tuned 
     StreamWriter writer1 = new StreamWriter(@str_FeedFilePath1 + @str_FileName1); 
     var result = string.Empty; 
     StringBuilder buffer1 = new StringBuilder(1048576); 
     while (reader1.Read()) 
     { 
      for (int j = 0; j < reader1.FieldCount; j++) 
      { 
       buffer1.Append(reader1[j] + "|"); 
      } 
      buffer1.AppendLine(); 
      if (buffer1.Length > 1048576 - 1024) 
      { 
       writer1.Write(buffer1.ToString()); 
       buffer1.Length = 0; 
      } 
     } 
     writer1.Write(buffer1.ToString()); 
     writer1.WriteLine(result); 
     reader1.Close(); 
     writer1.Close(); 

     Dts.TaskResult = (int)ScriptResults.Success; 
    } 
} 
+0

您的標題說VB.NET,您的標籤說C#和VB.NET,您的代碼是C#。做好決定。 – jmcilhinney

+0

首先在'buffer1.Append(reader1 [j] +「|」);標識你的日期時間列索引;'然後你可以使用'.ToString(...)'格式化它,只要你願意。 – Prix

+0

我想你的意思是毫秒......納秒等於十億分之一秒! – navigator

回答

0

您需要檢查讀取器返回的對象。它會是這個樣子:

if (reader1[j] is DateTime) 
    buffer1.Append(((DateTime)reader1[j]).ToString("o")); 
else 
    buffer1.Append(reader1[j]); 
buffer1.Append("|"); 
... 

PS:日期時間只精確到100ns的,除非你正在使用MS的DATETIME2場,你可能比在DB更加不準確。你的意思是毫秒嗎?

+0

Sql查詢將返回多個列,其中將包含文本和日期字段。因此,如果Sql查詢返回多個列,那麼如何處理這個問題或者您認爲上述問題將會起作用 – user3657339

相關問題