[英]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日,取决于文化),这可能会失败,因此使用ParseExact
或TryParseExact
与确切的格式字符串(和文化)可能会更健壮解。
这可以使用任何常用方式(ADO.NET,类似于nHibernate或EF的ORM)直接提供给SQL Server。
在DATETIME
以SQL Server格式存储的问题中存在一种误解 - 它们不是。 它们的内部表示不可见 - 您看到的是SSMS将值格式化为您所看到的值。
您必须使用DateTime.TryParseExact
在DateTime
对象中获取它,然后将其作为参数存储在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.