插入SQL Server 2012的日期错误

时间:2016-11-29 05:40:01

标签: c# asp.net sql-server

我正在尝试在数据库表中插入今天的日期。但问题是在今天的日期而不是在数据库中插入此值“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();
}

1 个答案:

答案 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()