今作成している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を作成してそれを読み込むという手法は紹介されてました。

VS 2005でいってみようDBプログラミング

おすすめの記事