今作成しているWebアプリで、どうしてもSqlDataSourceで取得したデータにある特定のフィールド値を取得したくなった。
単純にSqlDataSourceで取得した件数なら、
Protected Sub SqlDataSource_Selected(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.SqlDataSourceStatusEventArgs) Handles SqlDataSource.Selected
Dim rec As Long
rec = e.AffectedRows
End Sub
で、取得できるが、その中身へのアクセスとなると・・・?
いろいろ調べてみたが、SqlDataSourceは、GridViewやFormViewにバインドして使用するのに最適化されているから、いろいろ加工したりするなら、DataAdapterでDataSetに格納するべきみたいな記述が多い。
それはそれでいいのだけれど、SqlDataSourceにもDataSetがあるみたいだし、参照するだけなら二度手間のような・・・(汗
まぁ、ここは勉強のためにもできるだけやってみようということで、下の方法にたどり着きました。
Dim dv As DataView
dv = CType(SqlDataSource.Select(DataSourceSelectArguments.Empty), DataView)
Dim rowview As DataRowView
For Each rowview In dv
Label1.Text = rowview(3).ToString
Next
SqlDataSourceのSelectメソッドによってDataViewが返されます。ということなので、そのDataViewを利用できるみたいですが、Selectメソッドを呼び出す度にDBへのアクセスが行われるそうなので、DBへの負担は同じ?
とか、いろいろ考えていたら、どうやらSqlDataSourceを使わずに、ObjectDataSourceを使ってDataSetを作成してそれを読み込むという手法は紹介されてました。