我正在尝试在数据库表中插入今天的日期。但问题是在今天的日期而不是在数据库中插入此值“1900-01-01”。我正在使用SQL Server 2012.
ASP.NET标记:
<asp:TextBox ID="msnDate" runat="server" Enabled="false"></asp:TextBox>
<cc1:CalendarExtender ID="msnDate_CalendarExtender" runat="server" Enabled="True" TargetControlID="msnDate">
</cc1:CalendarExtender>
代码隐藏我写了这段代码:
msnDate_CalendarExtender.SelectedDate = DateTime.Today;
这是插入查询
protected void btnSave_Click(object sender, EventArgs e)
{
SqlConnection cs = new SqlConnection("Data Source=DESKTOP-3T94FQ0;Initial Catalog=RAMS;Integrated Security=False;UID=sa;Password=sa123;");
SqlCommand cmd = new SqlCommand("INSERT INTO [tbl_musannet] ([pessenger_id],[mus_date]) VALUES('"+ ddlPessengerList.Text + "','" + msnDate.Text +"')", cs);
cs.Open();
cmd.ExecuteNonQuery();
cs.Close();
}
答案 0 :(得分:0)
您正在使用日期的字符串表示而不显式设置格式,这意味着它可能会根据ASP.NET应用程序的Culture
设置以及数据库服务器的设置而有所不同。
(例如2011年6月5日,或2011年5月6日,或2005年6月11日为05/06/11
?)
您也可能遇到潜在的SQL注入问题。您可以使用参数将这两个问题一起解决,这些参数会将原始日期时间值(而不是格式化表示)传递给没有歧义的数据库服务器。
Int32 pessengerId;
if( !Int32.TryParse( ddlPessengerList.Text, out pessengerId ) ) {
// abort, show error message
return;
}
DateTime msnDate = msnDate.Value; // your `msnDate` control should have a strongly-typed way of getting the raw DateTime value, you should not attempt to parse a textual representation of a date/time.
if( msnDate < new DateTime( 2016, 01, 01 ) ) {
// sanity-check the date range, if it's too far in the past or future reject it, according to your business rules
return;
}
SqlCommand cmd = cs.CreateCommand();
cmd.CommandText = "INSERT INTO tbl_musannet ( pessenger_id, mus_date ) VALUES( @passengerId, @musDate )";
cmd.Parameters.AddWithValue("@pessenger_id", pessengerId );
cmd.Parameters.AddWithValue("@musDate ", msnDate);
cs.Open();
cmd.ExecuteNonQuery();
cs.Close()