保存到数据库中时,日期更改为大不相同的值

时间:2015-10-16 09:49:02

标签: asp.net .net vb.net date datetime

我正在尝试将文本框中的日期输入datetime类型的列

代码如下

    txtbookissue_date.Text = DateTime.Now.Date
    txtbookreturn_date.Text = DateAdd(DateInterval.Day, 7, DateTime.Now.Date)

当我将这两个值插入数据库时​​,(插入书籍....)17-02-1984等值会显示在数据库中,而不是26-2-2015

我做了一点研究,发现SQL将其解释为“26减2减去2015”而不是日期。

打印Date(txtbookissue_date.Text)会得到正确的结果,唯一的问题是将其保存到数据库中。

对此的解决方案显然是用单引号括起日期,即'26-2-2015'而不仅仅是26-2-2015,因为我正在使用日期函数我决定改变

txtbookissue_date.Text = DateTime.Now.Date

txtbookissue_date.Text= "'"+DateTime.Now.Date+"'"

但它返回一个错误,类似于'无法将varchar类型转换为日期类型,超出范围异常'

我该如何解决这个问题?任何帮助将不胜感激。

    txtbookissue_date.Text = DateTime.Now.Date
    txtbookreturn_date.Text = DateAdd(DateInterval.Day, 10, DateTime.Now.Date)

Protected Sub btn_issue_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btn_issue.Click
    con.Open()
    cmd.CommandText = "insert into Book (book_id, book_name, book_author,publisher,mem_id,mem_name,issue_date,return_date) values('" & txtbookissue_id.Text & "','" & txtibookssue_name.Text & "','" & txtbookissue_author.Text & "','" & txtbookissue_publi.Text & "','" & txtbookissue_memid.Text & "','" & txtbookissue_memname.Text & "'," & txtbookissue_date.Text & "," & txtbookreturn_date.Text & ")"
    cmd.Connection = con
    cmd.ExecuteNonQuery()
    con.Close()
    Response.Redirect("Welcome.aspx")
End Sub

3 个答案:

答案 0 :(得分:2)

您要将日期作为文字插入。我的意思是,当你需要插入它时,2015-02-26'您正试图以其他格式插入它。实际上你应该在sql查询中使用参数。你的sql语句应该是那样的

insert into Book (book_id, book_name, book_author,publisher,mem_id,mem_name,issue_date,return_date) values(@book_id, @book_name, @book_author,@publisher,@mem_id,@mem_name,@issue_date,@return_date)

在执行查询之前,您应该在命令对象中设置参数。

cmd.Parameters.AddWithValue("@return_date", DateAdd(DateInterval.Day, 10, Date.Now.Date))

有关使用带访问权限的参数的详细信息,请查看here

答案 1 :(得分:1)

首先,我强烈建议您使用Paramaters

其次,因为您希望将日期格式化为不是默认文化的字符串。我建议你使用String.Format()或ToString()(examples)。

由于您的数据库很可能需要一个日期时间。您可以使用DateTime.ParseExact将字符串解析回DateTime。请看this答案,了解方法。

如果有帮助,请告诉我,如果不是,您需要向我们提供更多信息。

答案 2 :(得分:0)

您将string放在DateTime列中,请在将这些值放入数据库之前将其转换回原始类型。

DateTime issueDate = DateTime.Parse(txtbookissue_date.Text);
DateTime returnDate = DateTime.Parse(txtbookreturn_date.Text);