2011-04-05 36 views
2

我有兩種方法將數據綁定到ReportViewer控件。哪一個更好?你能給我一些建議嗎?將數據綁定到ReportViewer控件的最佳方法是什麼? (DataAdapter vs DataReader)

方法1:使用SqlDataAdapter的

Dim dt As DataTable = New DataTable 
Dim conn As SqlConnection = New SqlConnection(connString) 
Try 
    conn.Open() 
    Dim cmd As New SqlCommand(sql, conn) 
    Dim adapter As New SqlDataAdapter(cmd) 
    adapter.Fill(dt) 
Catch ex As Exception 
Finally 
    conn.Close() 
End Try 

Dim ds As New ReportDataSource(dataSourceName, dt) 
rViewer.LocalReport.DataSources.Clear() 
rViewer.LocalReport.DataSources.Add(ds) 
rViewer.LocalReport.Refresh() 

方法二:使用SqlDataReader的

Dim dt As New DataTable() 
Dim conn As SqlConnection = New SqlConnection(connString) 
Try 
    conn.Open() 
    Dim cmd As New SqlCommand(sql, conn) 
    Dim reader As SqlDataReader = cmd.ExecuteReader() 

    dt.Load(reader) 
    reader.Close() 
Catch ex As Exception 
Finally 
    conn.Close() 
End Try 

Dim ds As New ReportDataSource(dataSourceName, dt) 
rViewer.LocalReport.DataSources.Clear() 
rViewer.LocalReport.DataSources.Add(ds) 
rViewer.LocalReport.Refresh() 
+0

非常歡迎您發表評論,接受或索取更多信息。這就是StackOverflow的工作方式。謝謝。 – LeftyX 2011-04-07 07:03:37

回答

1

如果我有兩個我會去的第一個導致數據集之間選擇使用數據讀取器在內部填充。
您的第二個示例將數據集中的數據讀取器轉換爲數據集。
第一個選項應該稍微快一點。 另一種選擇是使用對象(實體)作爲數據源。
你可以找到更多的信息here

+0

感謝您的回覆。我想知道是否可以將DataReader直接綁定到ReportViewer。我試圖使用它,但似乎在這裏有一些神祕的錯誤(由於我的項目的緊迫性,我不得不改變我的方法而沒有調查發生了什麼問題)。你有沒有嘗試過? – nguyen190887 2011-04-09 16:40:53

+0

是的,你不能這樣做,因爲它的本質。數據收集器不是一個斷開的數據集,就像數據集一樣。數據讀取器保持連接到數據庫直到關閉連接。它一次提取一行。 ReportViewer無法管理它,因爲它需要一個斷開(可枚舉)的數據集。 – LeftyX 2011-04-09 16:55:15

+0

我很清楚這一點。感謝您的幫助! – nguyen190887 2011-04-13 02:58:02

相關問題