2016-03-19 18 views
0

Ich glaube, meine Frage mag amateurhaft erscheinen, aber mein Ziel ist es, eine DateTime Daten aus meiner Datenbank zu nehmen und sie in eine lokale Variable zu speichern. Mein Code-Schnipsel wurde unter hinzugefügt:DateTime-Variable in lokale C# -Variable speichern

string checkdu1 = "select Top 1 Date from CF"; 
SqlCommand cmdd = new SqlCommand(checkdu1, con); 
SqlDataReader dru1 = cmdd.ExecuteReader(); 
DateTime d1 = Convert.ToDateTime("Date");   //error here 

Der Datenbankname ist CF und der Wert der Date Spalte abgerufen werden. Aber ich bin eine immer

Ausnahme des Typs ‚System.FormatException‘ ist in mscorlib.dll aufgetreten war aber nicht

Zusätzliche Informationen in Benutzercode behandelt: Die Zeichenfolge wurde nicht als gültige Datetime erkannt. Es ist ein unbekanntes Wort im Index beginnend 0.

Der Datentyp Date in der Datenbank DateTime ist.

Ich kann keine richtige Antwort finden und Ihre Hilfe wäre willkommen.

+1

Der Parameter Convert.ToDateTime sollte der Wert, den Sie wollen zu konvertieren – potatopeelings

+0

Zeigen Sie, was in Ihrer Tabelle in der Datenbank ist –

Antwort

2

Sie versuchen, das Wort "Date" in ein Datum zu konvertieren, das nicht funktionieren wird.

Probieren Sie etwas wie

DateTime d1 = dru1.GetDateTime(dru1.GetOrdinal("Date")); 
+0

Vielen Dank! Ich habe das versucht und es gibt mir eine InvalidOperationException. –

+0

Vergessen Sie nicht, den 'reader.Read()' zu machen. In diesem Fall 'dru1.Read()'. Es gibt einen 'bool' zurück, so dass es ratsam wäre, vor dem Versuch, die Daten zu erfassen, zu überprüfen, ob es wahr ist. – TyCobb

+0

@TyCobb ist korrekt. Alternativ dazu können Sie, wenn Ihr Code-Snippet für Ihren tatsächlichen Code repräsentativ ist (dh eine Zeile mit einer zurückgegebenen Spalte), auf den gesamten "DataReader" -Aufruf verzichten und einfach "cmdd.ExecuteScalar" aufrufen - dies wird die erste Spalte des ersten Ergebnisses zurückgeben und Sie können das dann zu einer DateTime umwandeln, z 'd1 = Convert.ToDateTime (cmdd.ExecuteScalar());' (vorausgesetzt, dass die SQL immer ein gültiges Datum zurückgibt) –

0

ich denke, das DateTime dt = Convert.ToDateTime(dru1["Date"]);

+0

Vielen Dank für Ihre Hilfe !! –

1

Zuerst arbeiten, sollten Sie nicht verwenden dru1 für alles.

Schauen Sie sich hier ein, wie der Leser zu verwenden SqlDataReader Class

Zweitens als Datumsfeld vom Datentyp ist Datetime, es macht keinen Sinn, es zu konvertieren; es ist ein Date.

+0

Vielen Dank für Ihre Vorschläge! –

0

Sie haben zwei Möglichkeiten auf der Grundlage Ihrer Codebeispiel:

1 Verwenden von Datareader

string checkdu1 = "select Top 1 Date from CF"; 
SqlCommand cmdd = new SqlCommand(checkdu1, con); 
SqlDataReader dru1 = cmdd.ExecuteReader(); 
DateTime d1; 
if(dru1.Read()) d1 = dru1.GetDateTime(0); 

2 Mit ExecuteScalar

string checkdu1 = "select Top 1 Date from CF"; 
SqlCommand cmdd = new SqlCommand(checkdu1, con); 
DateTime d1 = (DateTime) cmdd.ExecuteScalar(); 
+0

Vielen Dank für Ihre Hilfe :) –