2012-02-23 33 views
6

Tôi có câu hỏi về việc chuyển đổi một datareader thành datatable. Trong mã của tôi, tôi có một datareader được tạo trong một lớp và được chuyển đến một lớp khác mà tôi muốn chuyển đổi nó thành một datatable.Làm thế nào để chuyển đổi một nhà quản trị dữ liệu thành datatable

Khi tôi làm điều này, có vẻ như nó không hoạt động vì bảng vẫn trống. Nếu tôi thực hiện chuyển đổi trong cùng một hàm, nó hoạt động tốt.

Chỉ khi tôi vượt qua datareader đến một chức năng khác, nó ngừng hoạt động. Đây có phải là vì dr bị đóng hay gì đó không? Làm thế nào để khắc phục vấn đề này? Bất kỳ sự trợ giúp nào đều sẽ là tuyệt vời.

+0

Bạn không bao giờ nên chuyển 'DataReader' vì bạn sẽ bỏ lỡ hoàn toàn việc bỏ các đối tượng hoặc nhiều lần dữ liệu sẽ không còn ở đó nữa. Bạn có thể chỉnh sửa phương thức đang sử dụng, phương thức trước khi trả về 'DataReader' không? Vì vậy, ví dụ bạn có thể thêm một thuộc tính 'DataTable' vào phương thức đó và điền nó trước khi trả về để bạn có thể lấy ra ngoài' lớp' đó ... – balexandre

+1

không, tôi được hướng dẫn chỉ trả về một bộ dữ liệu. logic là các chức năng mà vượt qua datareader có thể được sử dụng ở nơi khác – jason

Trả lời

2

Kiểm tra này ra:

Public Function ExecuteQuery(ByVal s As String, ByVal condb As SqlConnection, ByVal ParamArray params() As SqlParameter) As DataTable 
     Dim dt As DataTable = Nothing 
     Using da As New System.Data.SqlClient.SqlDataAdapter(s, condb)    
      dt = New DataTable 
      If params.Length > 0 Then 
       da.SelectCommand.Parameters.AddRange(params) 
      End If 
      If da.SelectCommand.Connection.State <> ConnectionState.Open Then da.SelectCommand.Connection.Open() 
      da.Fill(dt)      
     End Using 
     Return dt 
End Function 
+0

+1, tốt nhất @HndlCode –

+0

cảm ơn cho phản ứng. là có anyway để làm điều này mà không biết kết nối hoặc các thông số? Điều duy nhất mà tôi được thông qua là bộ dữ liệu. cảm ơn – jason

+0

ParamArray là tùy chọn, do đó bạn không cần phải vượt qua bất kỳ tham số nào :), vui lòng đánh dấu anser của tôi là đúng – HndlCode

39

Sử dụng DataTable Load() phương pháp.

// Given a DataReader called "reader" 
DataTable dt = new DataTable(); 
dt.Load(reader) 
Các vấn đề liên quan