簡體   English   中英

將字符串轉換為Datetime VB.net

[英]Converting string to Datetime VB.net

我有一個字符串變量,用這種格式的日歷填充日期29/07/2012

我希望將此轉換為datetime數據類型,然后以此格式將其存儲在sql數據庫中2012-07-29 00:00:00:000

The error message i'm getting at the minute is:
"The conversion of a char data type to a datetime data type resulted in an out-of-range datetime value."

這是一些代碼:

Dim strDate As String = ""

 Dim cmd2 As New SqlCommand("sp_Return6MonthTotal")
                Dim strTotalHours6Month As Integer = 0
                cmd2.Connection = con1
                cmd2.CommandType = Data.CommandType.StoredProcedure
                cmd2.Parameters.Add(New SqlParameter("@ServiceNumber", Data.SqlDbType.Char, 11))
                cmd2.Parameters.Add(New SqlParameter("@OvertimeDate2", Data.SqlDbType.DateTime))
                cmd2.Parameters("@ServiceNumber").Value = strServiceNumber
                cmd2.Parameters("@OvertimeDate2").Value = strDate

                If cmd2.ExecuteScalar() Is DBNull.Value Then
                    Label17.Text = "0"
                    Label21.Text = "0"
                Else
                    strTotalHours6Month = cmd2.ExecuteScalar()
                    Label17.Text = strTotalHours6Month
                    Label21.Text = Math.Round(strTotalHours6Month / 6)
                End If


                Dim cmd3 As New SqlCommand("sp_ReturnMonthTotal")
                Dim strTotalHours As Integer = 0
                cmd3.Connection = con1
                cmd3.CommandType = Data.CommandType.StoredProcedure
                cmd3.Parameters.Add(New SqlParameter("@ServiceNumber", Data.SqlDbType.Char, 11))
                cmd3.Parameters.Add(New SqlParameter("@OvertimeDate2", Data.SqlDbType.DateTime))
                cmd3.Parameters("@ServiceNumber").Value = strServiceNumber
                cmd3.Parameters("@OvertimeDate2").Value = strDate

Stored procedures:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[sp_ReturnMonthTotal]
   @ServiceNumber varchar(100),
   @OvertimeDate2 datetime
AS

SELECT sum(hoursworked) from overtime where servicenumber = @ServiceNumber and month(CONVERT(datetime, OvertimeDate2, 103)) = month(CONVERT(datetime, @OvertimeDate2, 103)) and year(CONVERT(datetime, OvertimeDate2, 103)) = year(CONVERT(datetime, @OvertimeDate2, 103))

-------------
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[sp_Return6MonthTotal]
   @ServiceNumber varchar(100),
   @OvertimeDate2 datetime
AS

SELECT sum(hoursworked) from overtime where servicenumber = @ServiceNumber and overtimedate2 >= DATEADD(month, -6, CONVERT(datetime, @OvertimeDate2, 103))

對不起,我的編程知識不是很好,我沒有對此編碼,所以希望這對某人有意義。

嘗試通過如下所示的單個代碼轉換日期,然后將其發送到數據庫以存儲其值

vb.net

Dim strDate As String = "21/07/2006"
Dim dtfi As New DateTimeFormatInfo()
dtfi.ShortDatePattern = "dd/MM/yyyy"
dtfi.DateSeparator = "/"
Dim objDate As DateTime = Convert.ToDateTime(strDate, dtfi)

C#(REF)

 string strDate = "21/07/2006";
 DateTimeFormatInfo dtfi = new DateTimeFormatInfo();
 dtfi.ShortDatePattern = "dd/MM/yyyy";
 dtfi.DateSeparator = "/";
 DateTime objDate = Convert.ToDateTime(strDate, dtfi);

DateTime.Parse("29/07/2012")將無問題地解析為DateTime類型。 如果字符串不明確(“08/07/2012”可能是7月8日 8月7日,取決於文化),這可能會失敗,因此使用ParseExactTryParseExact與確切的格式字符串(和文化)可能會更健壯解。

這可以使用任何常用方式(ADO.NET,類似於nHibernate或EF的ORM)直接提供給SQL Server。

DATETIME以SQL Server格式存儲的問題中存在一種誤解 - 它們不是。 它們的內部表示不可見 - 您看到的是SSMS將值格式化為您所看到的值。

您必須使用DateTime.TryParseExactDateTime對象中獲取它,然后將其作為參數存儲在SqlCommand

Dim dt As DateTime
dt = Convert.ToDateTime(TextBox1.Text)

但我認為你應該使用日期格式作為MM / DD / YYYY(07/29/2012而不是29/07/2012)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM