2016-11-29 4 views
-2

Ich versuche, das heutige Datum in der Datenbanktabelle einzufügen. aber Problem ist statt des heutigen Datums dieser Wert "1900-01-01" ist in der Datenbank eingefügt. Ich bin mit SQL Server 2012.Falsches Datum eingefügt in SQL Server 2012

ASP.NET Markup:

<asp:TextBox ID="msnDate" runat="server" Enabled="false"></asp:TextBox> 
<cc1:CalendarExtender ID="msnDate_CalendarExtender" runat="server" Enabled="True" TargetControlID="msnDate"> 
</cc1:CalendarExtender> 

-Code-behind schrieb ich diesen Code:

msnDate_CalendarExtender.SelectedDate = DateTime.Today; 

Dies ist der Einsatz Abfrage

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

Ich finde keine einfügen Abfrage hier, zeigen Sie stattdessen die Abfrage für den ASP-Code –

+0

danke.Einfügung Abfrage hinzugefügt. – bluebay

+0

Haben Sie 'msnDate_CalendarExtender.SelectedDate' anstelle von' msnDate.Text' versucht? Vorsicht vor Injection –

Antwort

0

Sie verwenden eine Zeichenfolgendarstellung eines Datums, ohne explizit ein Format festzulegen, was bedeutet, dass sie gemäß dervariieren kannEinstellungen Ihrer ASP.NET-Anwendung und entsprechend den Einstellungen des Datenbankservers.

(z ist 05/06/11 der 5. Juni 2011, oder der 6. Mai 2011 oder der 11. Juni 2005?)

Sie auch ein Problem mit potentiellen SQL-Injection zu haben. Sie können beide Probleme zusammen beheben, indem Sie Parameter verwenden, die den unverarbeiteten Datums-/Uhrzeitwert (und nicht eine formatierte Darstellung) an den Datenbankserver übergeben, an dem keine Mehrdeutigkeit vorliegt.

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() 
+0

Ok. Vielen Dank. Ich versuche das. – bluebay

+0

Sie sollten auschecken [Können wir AddWithValue() bereits beenden?] (Http://blogs.msmvps.com/jcoehoorn/blog/2014/05/12/can-we-stop-using-addwithvalue-ready/) und hör auf '.AddWithValue()' - es kann zu unerwarteten und überraschenden Ergebnissen führen ... –