2014-12-30 21 views
7

Mam tabelę utworzoną w ASP.net i chcę wypełnić tabelę informacjami z bazy danych po załadowaniu strony. Występuje błąd, że określona obsada nie jest poprawna. Co ja robię źle? Herezje mój kodOkreślona obsada jest nieprawidłowa?

public string getData() 
{ 
     string htmlStr = ""; 

     SqlConnection conn = new SqlConnection(connString); 
     SqlCommand command = conn.CreateCommand(); 
     command.CommandText = "SELECT * from INFO"; 
     conn.Open(); 
     SqlDataReader reader = command.ExecuteReader(); 

     while (reader.Read()) 
     { 
      DateTime Date = reader.GetDateTime(0); 
      DateTime Time = reader.GetDateTime(1); 
      htmlStr += "<tr><td>" + Date + "</td><td>" + Time + "</td></tr>";     
     } 

     conn.Close(); 

     return htmlStr; 
} 

<table style="width:100%"> 
       <caption>INFO</caption> 
       <tr> 
        <td> Date </td> 
        <td> Time </td> 
       </tr> 
        <%=getData()%> 
       </table> 

To jest mój błąd:

This is my error

jest rzucanie wyjątku na tej linii z powyższego kodu:

DateTime Date = reader.GetDateTime(0); 
+1

Która linia kodu rzuca wyjątek? Czy istnieje ślad stosu? –

+0

@Grant this line 'DateTime Date = reader.GetDateTime (0);' rzucił wyjątek – crsMC

+2

Zastąp 'SELECT * z INFO' przez' SELECT YOUR_DATE_COLUMN, YOUR_TIME_COLUMN z INFO' i spróbuj ponownie. –

Odpowiedz

9

Z Twojego komentarza:

this line DateTime Date = reader.GetDateTime(0); was throwing the exception

Pierwsza kolumna nie jest ważna DateTime. Najprawdopodobniej masz wiele kolumn w tabeli, a ty pobierania im wszystko przez uruchomienie tej kwerendy:

SELECT * from INFO 

Wymień go kwerendy, która pobiera tylko dwie kolumny, które Cię interesują :

SELECT YOUR_DATE_COLUMN, YOUR_TIME_COLUMN from INFO 

Następnie spróbuj ponownie odczyt wartości:

var Date = reader.GetDateTime(0); 
var Time = reader.GetTimeSpan(1); // equivalent to time(7) from your database 

Lub:

var Date = Convert.ToDateTime(reader["YOUR_DATE_COLUMN"]); 
var Time = (TimeSpan)reader["YOUR_TIME_COLUMN"]; 
+0

Mam zamiar spróbować jeszcze raz, ale nie jest już wyrzucanie wyjątku daty – crsMC

+0

To zadziałało, gdy zmieniłem Czas z DateTime na TimeSpan. Dziękuję bardzo. Jedyny problem, jaki mam teraz, a nie taki duży. Ale w przypadku daty wyświetla datę, a następnie 00:00:00 po niej – crsMC

+2

to jest odpowiedź, wybierasz złe kolumny, jeśli twoja tabela ma tabelę tożsamości, wybierasz identyfikator o wartości 0 prawdopodobne. Zawsze podawaj nazwy kolumn używając 'reader [" columnname "]' zamiast numeru, ponieważ struktura tabeli zawsze podlega zmianie. – prospector

0

htmlStr jest łańcuch to trzeba Date i Time zmiennych string

while (reader.Read()) 
       { 
        DateTime Date = reader.GetDateTime(0); 
        DateTime Time = reader.GetDateTime(1); 
        htmlStr += "<tr><td>" + Date.ToString() + "</td><td>" + 
        Time.ToString() + "</td></tr>";     
       } 
+0

Dziękujemy! @Ganesh – crsMC

+0

To nie powinno być konieczne ... Nie sądzę, że jest to przyczyną wyjątku, ale potrzebujemy więcej szczegółów. –

+0

@ notc1 wspomnieć, co to jest 'getData()' –

Powiązane problemy