我正在尝试将文本框中的日期输入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
答案 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);