2013-03-07 38 views
0

我有一個將數據讀取器轉換爲CSV的功能。 SQL返回YYYY-MM-DD HH:MM:SS.000而.net將其轉換爲MM/DD/YYYY值。 我想檢查數據讀取器中的值是否是DateTime並將其轉換回YYYY-MM-DD HH:MM:SS.000格式。如何檢查SQLDataReader項是否是DateTime os字符串類型值?

UPDATE:

代碼:

Public Function DR_To_CSV_Stream() As Boolean 
    Dim FirstLine As String = "" 
    Dim retVal As Boolean 

    m_DebugMessage = m_DebugMessage & "DR_To_CSV_Stream: " 

    If m_Datareader.Read Then 'CREATE HEADER NAMES 
     m_DebugMessage = m_DebugMessage & "CREATE HEADER NAMES: " 
     For intcount = 0 To m_Datareader.FieldCount - 1 
      If intcount <> m_Datareader.FieldCount - 1 Then 
       sw.Write(String.Format("""{0}"",", m_Datareader.GetName(intcount))) 
       FirstLine = FirstLine + String.Format("""{0}"",", m_Datareader.Item(intcount)) 
      Else 
       sw.Write(String.Format("""{0}""", m_Datareader.GetName(intcount))) 
       FirstLine = FirstLine + String.Format("""{0}""", m_Datareader.Item(intcount)) 
      End If 
     Next 
     sw.WriteLine("") 
     m_DebugMessage = String.Format("{0}WriteLine(FirstLine): {1}", m_DebugMessage, FirstLine) 
     sw.WriteLine(FirstLine) 

     Do While m_Datareader.Read() 'READ DATA AND CREATE ROWS 
      m_DebugMessage = m_DebugMessage & "READ DATA AND CREATE ROWS: " 
      For intcount = 0 To m_Datareader.FieldCount - 1 
       If intcount <> m_Datareader.FieldCount - 1 Then 
        sw.Write(String.Format("""{0}"",", m_Datareader.Item(intcount))) 
       Else 
        sw.Write(String.Format("""{0}""", m_Datareader.Item(intcount))) 
       End If 
      Next 
      sw.WriteLine("") 
     Loop 
     m_Datareader.Close() 
     m_DebugMessage = m_DebugMessage & "m_Datareader.Close(): " 
     m_Datareader = Nothing 
    Else 
     m_DebugMessage = m_DebugMessage & "m_Datareader.Read = FALSE: " 
    End If 
    sw.Flush() 'COMMIT LAST SECTION TO WRITER 
    If sw.BaseStream Is Nothing Then 
     m_DebugMessage = m_DebugMessage & " | |NOTHING IN THE STREAM: " 
    Else 
     m_DebugMessage = m_DebugMessage & " | |THERE IS SOMETHING IN THE STREAM: " 
    End If 


    m_sr = New IO.StreamReader(sw.BaseStream) 
    m_sr.BaseStream.Seek(0, System.IO.SeekOrigin.Begin) 
    m_ReturnStream = m_sr.BaseStream 

    If m_ReturnStream.CanRead Then 
     retVal = True 
     m_DebugMessage = m_DebugMessage & " | | 2ND TIME - THERE IS SOMETHING IN THE STREAM: " 

    Else 
     retVal = False 
     m_DebugMessage = m_DebugMessage & " | |NOTHING IN THE RETURN STREAM: " 
    End If 



    Return retVal 

End Function 

此功能轉換的DataReader CSV流。在其他功能我這個流轉換爲字符串,並將其寫入文件:

File.WriteAllBytes(outboundFileFullPath,Encoding.ASCII.GetBytes(數據))

希望幫助理解我的問題。

或者另一種方法是:將MemoryStream直接寫入文件。我試過但沒有工作。 謝謝!

更新#2 這裏是我基於Romil的建議是什麼:

Dim dateValue As Date 
        If intcount <> m_Datareader.FieldCount - 1 Then 
         If (DateTime.TryParse(m_Datareader.Item(intcount).ToString(), dateValue)) Then 
          sw.Write(String.Format("""{0}"",", dateValue.ToString("yyyy-MM-dd"))) 
         Else 
          sw.Write(String.Format("""{0}"",", m_Datareader.Item(intcount))) 
         End If 
        Else 
         sw.Write(String.Format("""{0}""", m_Datareader.Item(intcount))) 
        End If 
+0

分享你的研究可以幫助每個人。告訴我們你試過了什麼,以及它爲什麼不符合你的需求。這表明你已經花時間去嘗試幫助自己,它使我們避免重申明顯的答案,最重要的是它可以幫助你得到更具體和相關的答案! – 2013-03-07 19:14:40

+1

.NET不會將其「轉換爲」MM/DD/YYYY,儘管*字符串表示*在調用「ToString」後可能看起來像這樣。現在看看它現在確實是一個字符串,並從那裏。參考。 [日期時間格式字符串](http://msdn.microsoft.com/en-us/library/az4se3k1.aspx)。 – 2013-03-07 19:15:01

回答

0

使用DateTime.TryParse

string input = "2000-02-02"; 
    DateTime dateTime; 
    if (DateTime.TryParse(input, out dateTime)) 
    { 
     Console.WriteLine(dateTime); 
    } 

More Example

+0

謝謝!我會查的。 – Learner 2013-03-07 19:40:42

0

您可以覆蓋默認區域性當前線程指定默認您想要的DateTime格式:

Dim c As CultureInfo = New CultureInfo(System.Threading.Thread.CurrentThread.CurrentCulture.Name) 
    c.DateTimeFormat.ShortDatePattern = "yyyy-MM-dd" 
    c.DateTimeFormat.LongTimePattern = "HH:mm:ss.fff" 
    System.Threading.Thread.CurrentThread.CurrentCulture = c 
相關問題