在C#ASP.net中将文本框内容转换为日期时间格式时出错

在C#ASP.net中将文本框内容转换为日期时间格式时出错,c#,asp.net,datetime,culture,C#,Asp.net,Datetime,Culture,您好,我正在开发一个应用程序,因为我需要将日期存储在SQLServer2005数据库中,该数据库是从前端的文本框中检索的。在前端,用户可以从jQueryUIDatePicker插件中选择日期 Dim dt As New DateTime Dim txtDateFromUser As String = "04/09/2014" If DateTime.TryParse(txtDateFromUser, dt) = True Then

您好,我正在开发一个应用程序,因为我需要将日期存储在SQLServer2005数据库中,该数据库是从前端的文本框中检索的。在前端,用户可以从jQueryUIDatePicker插件中选择日期

        Dim dt As New DateTime
        Dim txtDateFromUser As String = "04/09/2014"

        If DateTime.TryParse(txtDateFromUser, dt) = True Then

            Dim connStr As String
            connStr = System.Configuration.ConfigurationManager.ConnectionStrings("youConnectionStringName").ConnectionString

            'Insert into database
            Dim sqlconn As New SqlConnection
            sqlconn.ConnectionString = connStr
            Dim sqlcmd As New SqlCommand("insert into tblDateTime (dtTestDate) values ('" + dt.ToString() + "')")
            sqlconn.Open()
            sqlcmd.Connection = sqlconn
            sqlcmd.ExecuteNonQuery()

        End If
我得到的错误如下:

String was not recognized as a valid DateTime.
        Dim dt As New DateTime
        Dim txtDateFromUser As String = "04/09/2014"

        If DateTime.TryParse(txtDateFromUser, dt) = True Then

            Dim connStr As String
            connStr = System.Configuration.ConfigurationManager.ConnectionStrings("youConnectionStringName").ConnectionString

            'Insert into database
            Dim sqlconn As New SqlConnection
            sqlconn.ConnectionString = connStr
            Dim sqlcmd As New SqlCommand("insert into tblDateTime (dtTestDate) values ('" + dt.ToString() + "')")
            sqlconn.Open()
            sqlcmd.Connection = sqlconn
            sqlcmd.ExecuteNonQuery()

        End If
我的密码是:

db.eventDate = DateTime.Parse(txtDate.Text, new CultureInfo("en-US").DateTimeFormat);
        Dim dt As New DateTime
        Dim txtDateFromUser As String = "04/09/2014"

        If DateTime.TryParse(txtDateFromUser, dt) = True Then

            Dim connStr As String
            connStr = System.Configuration.ConfigurationManager.ConnectionStrings("youConnectionStringName").ConnectionString

            'Insert into database
            Dim sqlconn As New SqlConnection
            sqlconn.ConnectionString = connStr
            Dim sqlcmd As New SqlCommand("insert into tblDateTime (dtTestDate) values ('" + dt.ToString() + "')")
            sqlconn.Open()
            sqlcmd.Connection = sqlconn
            sqlcmd.ExecuteNonQuery()

        End If

最好将
DateTime.ParseExact
与设置为日期时间选择器的正确日期时间格式一起使用

        Dim dt As New DateTime
        Dim txtDateFromUser As String = "04/09/2014"

        If DateTime.TryParse(txtDateFromUser, dt) = True Then

            Dim connStr As String
            connStr = System.Configuration.ConfigurationManager.ConnectionStrings("youConnectionStringName").ConnectionString

            'Insert into database
            Dim sqlconn As New SqlConnection
            sqlconn.ConnectionString = connStr
            Dim sqlcmd As New SqlCommand("insert into tblDateTime (dtTestDate) values ('" + dt.ToString() + "')")
            sqlconn.Open()
            sqlcmd.Connection = sqlconn
            sqlcmd.ExecuteNonQuery()

        End If
例如,如果格式为“MM/dd/yyyy”,则可以执行以下操作

db.eventDate =  DateTime.ParseExact(txtDate.Text, "MM/dd/yyyy", CultureInfo.InvariantCulture);
        Dim dt As New DateTime
        Dim txtDateFromUser As String = "04/09/2014"

        If DateTime.TryParse(txtDateFromUser, dt) = True Then

            Dim connStr As String
            connStr = System.Configuration.ConfigurationManager.ConnectionStrings("youConnectionStringName").ConnectionString

            'Insert into database
            Dim sqlconn As New SqlConnection
            sqlconn.ConnectionString = connStr
            Dim sqlcmd As New SqlCommand("insert into tblDateTime (dtTestDate) values ('" + dt.ToString() + "')")
            sqlconn.Open()
            sqlcmd.Connection = sqlconn
            sqlcmd.ExecuteNonQuery()

        End If

试试这个..对我来说很好

Convert.ToDateTime(txtDate.Text,System.Globalization.CultureInfo.GetCultureInfo("en-US").DateTimeFormat);
        Dim dt As New DateTime
        Dim txtDateFromUser As String = "04/09/2014"

        If DateTime.TryParse(txtDateFromUser, dt) = True Then

            Dim connStr As String
            connStr = System.Configuration.ConfigurationManager.ConnectionStrings("youConnectionStringName").ConnectionString

            'Insert into database
            Dim sqlconn As New SqlConnection
            sqlconn.ConnectionString = connStr
            Dim sqlcmd As New SqlCommand("insert into tblDateTime (dtTestDate) values ('" + dt.ToString() + "')")
            sqlconn.Open()
            sqlcmd.Connection = sqlconn
            sqlcmd.ExecuteNonQuery()

        End If

        Dim dt As New DateTime
        Dim txtDateFromUser As String = "04/09/2014"

        If DateTime.TryParse(txtDateFromUser, dt) = True Then

            Dim connStr As String
            connStr = System.Configuration.ConfigurationManager.ConnectionStrings("youConnectionStringName").ConnectionString

            'Insert into database
            Dim sqlconn As New SqlConnection
            sqlconn.ConnectionString = connStr
            Dim sqlcmd As New SqlCommand("insert into tblDateTime (dtTestDate) values ('" + dt.ToString() + "')")
            sqlconn.Open()
            sqlcmd.Connection = sqlconn
            sqlcmd.ExecuteNonQuery()

        End If

您应该使用DateTime.TryParse(表达式)或将对DateTime.Parse的调用包装在try/catch块中。只是出于兴趣,你能发布一些转换日期的例子吗?它们是美国格式的,对吗?

希望下面的代码对您有所帮助

        Dim dt As New DateTime
        Dim txtDateFromUser As String = "04/09/2014"

        If DateTime.TryParse(txtDateFromUser, dt) = True Then

            Dim connStr As String
            connStr = System.Configuration.ConfigurationManager.ConnectionStrings("youConnectionStringName").ConnectionString

            'Insert into database
            Dim sqlconn As New SqlConnection
            sqlconn.ConnectionString = connStr
            Dim sqlcmd As New SqlCommand("insert into tblDateTime (dtTestDate) values ('" + dt.ToString() + "')")
            sqlconn.Open()
            sqlcmd.Connection = sqlconn
            sqlcmd.ExecuteNonQuery()

        End If
以下是我使用的测试表:

        Dim dt As New DateTime
        Dim txtDateFromUser As String = "04/09/2014"

        If DateTime.TryParse(txtDateFromUser, dt) = True Then

            Dim connStr As String
            connStr = System.Configuration.ConfigurationManager.ConnectionStrings("youConnectionStringName").ConnectionString

            'Insert into database
            Dim sqlconn As New SqlConnection
            sqlconn.ConnectionString = connStr
            Dim sqlcmd As New SqlCommand("insert into tblDateTime (dtTestDate) values ('" + dt.ToString() + "')")
            sqlconn.Open()
            sqlcmd.Connection = sqlconn
            sqlcmd.ExecuteNonQuery()

        End If
        create table tblDateTime (dtTestDate datetime)

我只是在代码中更改了jQueryUIDatePicker的日期格式。之前它是英国格式,所以我在将数据保存到数据库时出错。但一旦我把它改成我们的格式,它就可以正常工作了

        Dim dt As New DateTime
        Dim txtDateFromUser As String = "04/09/2014"

        If DateTime.TryParse(txtDateFromUser, dt) = True Then

            Dim connStr As String
            connStr = System.Configuration.ConfigurationManager.ConnectionStrings("youConnectionStringName").ConnectionString

            'Insert into database
            Dim sqlconn As New SqlConnection
            sqlconn.ConnectionString = connStr
            Dim sqlcmd As New SqlCommand("insert into tblDateTime (dtTestDate) values ('" + dt.ToString() + "')")
            sqlconn.Open()
            sqlcmd.Connection = sqlconn
            sqlcmd.ExecuteNonQuery()

        End If
感谢所有审阅我的问题并向我推荐答案的人。

试试下面的代码

        Dim dt As New DateTime
        Dim txtDateFromUser As String = "04/09/2014"

        If DateTime.TryParse(txtDateFromUser, dt) = True Then

            Dim connStr As String
            connStr = System.Configuration.ConfigurationManager.ConnectionStrings("youConnectionStringName").ConnectionString

            'Insert into database
            Dim sqlconn As New SqlConnection
            sqlconn.ConnectionString = connStr
            Dim sqlcmd As New SqlCommand("insert into tblDateTime (dtTestDate) values ('" + dt.ToString() + "')")
            sqlconn.Open()
            sqlcmd.Connection = sqlconn
            sqlcmd.ExecuteNonQuery()

        End If
string yourDate = txtDate.Text;
string formattedDate = yourDate.ToString("dd-MM-yyyy");
DateTime dt = DateTime.ParseExact(formattedDate , "dd-MM-yyyy", CultureInfo.InvariantCulture);

嗨,杰米姆,谢谢你的及时回复。我尝试了你的建议,但仍然得到了相同的错误。在数据库中,默认值为1/1/1900 12:00:00 am。在我的应用程序中,用户将从JQuery UI日期选择器中选择日期,该日期将采用2014年4月14日的格式,我试图在插入数据库之前将此数据从textbox转换为代码中的有效日期时间类型。不正确。在DateTime.TryParse周围有一个try-catch块不会引发异常。TryParse正是这样做的-尝试解析给定的datetime值,如果成功则返回true,如果不成功则返回false。请重新阅读我写的内容,我说的是“将调用包装到datetime.parse到try/catch块中”,而不是datetime。TryParse请确保输入是您尝试为指定的cultureinfo转换的正确格式。您提供的输入格式是什么?例如:如果我从jQueryUIDatePicker中选择一个日期,它将类似于文本框中的2014年4月14日。我正在尝试将文本框数据(即2014年4月14日)转换为日期时间格式。对。这正是它不起作用的原因——您的格式是英国格式。您需要为它提供uk格式,以便它可以将其解析为正确的datetime格式(在本例中),然后将其转换为us格式。但是,在jquery ui选取器中,我确信您可以将默认输入类型/格式设置为en us,然后将格式正确设置为us格式,然后您的解析将正常工作,文本框日期的格式为2014年4月14日,在将其转换为日期时间类型后,它将保持类似于1/1/0001 12:00 AMyes,因为这是无法解析时的默认值(我相信)。就像我说的,照我的建议去做Hi@Damith,我也试过你的代码。现在我遇到了类似于
的错误,该字符串表示的日期时间在calendar System.Globalization.GregoriaCalendar中不受支持。
未发生任何事情:(文本框日期正在转换为默认日期1/1/0001 12:00:00 AM我不知道如何解决此错误。而且,在数据库中,它的数据类型仅为datetime。从文本框中获得的日期字符串是什么?