2014-12-30 18 views
7

Tôi có một bảng được tạo trong ASP.net và tôi muốn điền bảng với thông tin từ cơ sở dữ liệu khi trang đã được tải. Tôi gặp lỗi khi dàn diễn viên được chỉ định không hợp lệ. Tôi đang làm gì sai? Heres mã của tôiTruyền được chỉ định không hợp lệ?

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> 

Đây là lỗi của tôi:

This is my error

Nó được ném ngoại lệ trên dòng này từ đoạn code trên:

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

Dòng mã nào đang loại trừ ngoại lệ? Có theo dõi ngăn xếp không? –

+0

@Grant dòng này 'DateTime Date = reader.GetDateTime (0);' đã ném ngoại lệ – crsMC

+2

Thay thế 'SELECT * từ INFO' bằng' SELECT YOUR_DATE_COLUMN, YOUR_TIME_COLUMN từ INFO' và thử lại. –

Trả lời

9

Từ nhận xét của bạn:

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

Cột đầu tiên không phải là một DateTime hợp lệ. Nhiều khả năng, bạn có nhiều cột trong bảng của bạn, và bạn đang lấy họ tất cả bằng cách chạy truy vấn này:

SELECT * from INFO 

Thay thế nó với một truy vấn để lấy chỉ hai cột bạn quan tâm :

SELECT YOUR_DATE_COLUMN, YOUR_TIME_COLUMN from INFO 

Sau đó, hãy thử đọc các giá trị một lần nữa:

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

Hoặc:

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

Tôi sẽ thử lại lần nữa, nhưng nó không ném ngoại lệ ngày nữa – crsMC

+0

Điều này làm việc một khi tôi thay đổi Thời gian từ DateTime thành TimeSpan. Cảm ơn rất nhiều. Vấn đề duy nhất tôi có bây giờ, và nó không phải là lớn của một. Nhưng, đối với Date, nó hiển thị ngày và sau đó 00:00:00 sau khi nó – crsMC

+2

đây là câu trả lời, bạn đang chọn sai cột, nếu bảng của bạn có bảng nhận dạng thì bạn đang chọn id với 0 nhất có khả năng. Luôn chỉ định tên cột bằng cách sử dụng 'reader [" columnname "]' thay vì số vì cấu trúc bảng luôn có thể thay đổi. – prospector

0

htmlStr là chuỗi Sau đó bạn cần phải DateTime biến để 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

Cảm ơn bạn! @Ganesh – crsMC

+0

Điều đó không cần thiết ... Tôi không nghĩ đó là nguyên nhân của ngoại lệ, nhưng chúng tôi cần thêm chi tiết. –

+0

@ notc1 đề cập đến những gì là 'getData()' –

Các vấn đề liên quan