DateTime-Format YYYY-mm-dd Konvertierung von c# asp.net
Ich habe Probleme bei Datum-Konvertierung in asp.net c#. ich habe folgende Methode in meiner GeneralMethods Klasse
public DateTime mySqlDateFormate(string dateString, string format="g")
{
dateString = isOk(dateString) ? dateString : DateTime.Now.Year + "-" + DateTime.Now.Month + "-" + DateTime.Now.Day;
CultureInfo provider = CultureInfo.InvariantCulture;
//Parse date-only value with invariant culture.
try
{
result = DateTime.ParseExact(dateString, format, provider);
//Console.WriteLine("{0} converts to {1}.", dateString, result.ToString());
}
catch (Exception exc)
{
catchError(exc);
}
return result;
}
Ich sende Parameter von Seite zu dieser Methode:
protected void Page_Load(object sender, EventArgs e)
{
if(gm.isOk((string)Session["userid"])){
var sqlAry = "SELECT sno,std_name,gender,nic,father_name,father_nic,guardian_name,guardian_nic,dob,domicile,addres,reg_date,last_institute FROM std_basic_info WHERE sno = " + (string)Session["std_sno"];
DataTable data = gm.dataTable(sqlAry);
foreach (DataRow row in data.Rows)
{
snoTbl = row["sno"].ToString();
std_nameTbl = row["std_name"].ToString();
genderTbl = row["gender"].ToString();
nicTbl = row["nic"].ToString();
father_nameTbl = row["father_name"].ToString();
father_nicTbl = row["father_nic"].ToString();
guardian_nameTbl = row["guardian_name"].ToString();
guardian_nicTbl = row["guardian_nic"].ToString();
dobTbl = row["dob"].ToString();
domicileTbl = row["domicile"].ToString();
addresTbl = row["addres"].ToString();
reg_dateTbl = row["reg_date"].ToString();
institutionLstAttendedTbl = row["last_institute"].ToString();
}
this.std_sno.Value = snoTbl;
this.stdName.Text = std_nameTbl;
if (genderTbl.Equals("1")) { this.sex.SelectedIndex = 0; } else { this.sex.SelectedIndex = 1; }
this.stdNic.Text = nicTbl;
this.fatherName.Text = father_nameTbl;
this.fatherNic.Text = father_nicTbl;
this.guardianName.Text = guardian_nameTbl;
this.guardianNic.Text = guardian_nicTbl;
this.dob.Text = gm.mySqlDateFormate(dobTbl,"d").ToString();
this.domicile.Text = domicileTbl;
this.institutionLstAttended.Text = institutionLstAttendedTbl;
this.address.Text = addresTbl;
}
}
in mySql-Tabelle Wert in dob Spalten:
1978-04-23
Geht alles in Ordnung, aber wenn es der fetch-Wert aus der Tabelle es zeigt, wie diese:
1/1/0001 12:00:00 AM
Ich bin nicht immer der ursprüngliche Wert in meinem textfield?
Bitte jemand mir helfen, in diesem...
Dank
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es einige antipatterns in Ihrem code. Lassen Sie uns nehmen einen Blick auf Sie eins nach dem anderen.
Unnötige String-Konvertierung
Sollten Sie nicht anrufen
.ToString()
auf jeden einzelnen Wert aus der Datenbank. Sofort wirft Sie Weg jede Art von Informationen, die vorhanden sein könnten, und zwingt Sie, sich unnötig auf den Pfad der string-Formatierung und Analyse. Stattdessen sollten Sie casting, um den eigentlichen Datentyp zurückgegeben:Das gleiche gilt für alle anderen Spalten. Cast
(string)
,(int)
oder was auch immer die real-Datentyp ist.Mit DataTables
Wenn Sie die
DataTable
Klasse, laden Sie alle Datensätze aus der Abfrage in den Speicher. Wenn Sie haben ein großes dataset, das ist langsam und verbraucht viel Speicher. Stattdessen sollten Sie schauen, um mit einemDataReader
das funktioniert einfach mit Ihren Daten um eine Zeile zu einem Zeitpunkt.Ich bin ein wenig verwirrt, aber warum arbeiten Sie mit mehreren Zeilen, um zu beginnen mit, wie es scheint, Sie sind nur mit der letzten Zeile der Ergebnisse in Ihren Textboxen. Wenn Sie mehr als einen Datensatz zurückgegeben von der Abfrage, die Daten für die Zeilen 1 bis n-1 verworfen werden.
Mehrere Aufrufe der Systemzeit
Jedes mal, wenn Sie rufen
DateTime.Now
, ist das ein neuer Aufruf zum abrufen der Uhrzeit aus der Systemuhr. Wenn Sie ihn mehrere Male in dem gleichen Verfahren, riskieren Sie, dass ungültige Daten, wenn Ihr code ausgeführt wird über eine Tag-Grenze und der Zeitpunkt ist genau richtig. Außerdem ist es unnötig. Nenne es einfach mal und stellen die Ergebnisse in einer lokalen variable:Dann können Sie
now
wo Sie es brauchen.Komponieren ein DateTime aus teilen
Wenn Sie möchten das aktuelle Datum als string, keine Montage von teilen. Verwenden Sie einfach:
Arbeiten gegen den Rahmen
Ihre gesamte
mySqlDateFormate
- Funktion ersetzt werden könnte, mitDateTime.TryParseExact
, und viel mehr zuverlässig.String-Verkettung von SQL
Dies lässt Ihren code anfällig für SQL-Injection-Angriffe, und auch verhindern, dass der SQL-Abfrage-engine von ordnungsgemäß Zwischenspeichern ein Ausführungsplan für die Abfrage. Sie sollten mit parameratized Abfragen statt. Es ist ein Tonne Informationen über diese auf StackOverflow und das web im Allgemeinen, also werde ich nicht weiter über Sie hier.
Ich nehme an, dieser Teil ist verantwortlich für die
DateTime
Textfeld Zuordnunggm.mySqlDateFormate(dobTbl,"d").ToString();
, das Update ist sehr einfach;Vielleicht Formatbezeichner können ersetzen Sie die
"d"
immySqlDateFormate
. Ich weiß wirklich nicht, was diese Methode gibt es für. Es ist einToString
überlastungDateTime
akzeptiert Formatbezeichner und ist ausreichend. Wenn Sie eine benutzerdefinierte Methode, einfach aufhören es zu benutzen oder machen die Umsetzung einfachreturn input.ToString("yyyy-MM-dd");
Ich bin mir nicht sicher, was format, das Sie auf der Durchreise sind
mySqlDateFormate
MethodeStellen Sie sicher, dass format ist "JJJJ-MM-dd"
beachten Sie, dass ich verwendet habe, Großbuchstaben MM und nicht mm
Ändern:
Zu
Matt Johnson,**
diese Feste mein problem und auch ich folgte Ihr andere Tipps, die sind wirklich sehr geschätzt. Vielen Dank.
Ich nur dies ändern :
Und dann:
this.dob.Text = dateBirth.ToString("yyyy-MM-dd");