我有一个将数据读取器转换为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
分享你的研究可以帮助每个人。告诉我们你试过了什么,以及它为什么不符合你的需求。这表明你已经花时间去尝试帮助自己,它使我们避免重申明显的答案,最重要的是它可以帮助你得到更具体和相关的答案! – 2013-03-07 19:14:40
.NET不会将其“转换为”MM/DD/YYYY,尽管*字符串表示*在调用“ToString”后可能看起来像这样。现在看看它现在确实是一个字符串,并从那里。参考。 [日期时间格式字符串](http://msdn.microsoft.com/en-us/library/az4se3k1.aspx)。 – 2013-03-07 19:15:01