プロが教える店舗&オフィスのセキュリティ対策術

こんちは。
手元に書籍類が全く無く、ネットで調べたりしたものの僕の頭では解決しなかったので、ご存知の方がいらっしゃったら教えてくださいませ。

やりたい事
aspxに貼り付けてあるAccessDataSourceに対して、ODPにあるようなExecuteNonQueryやExecuteReaderみたいな関数で結果だけ取得したい。


現在の状況は
WEBフォーム上に、AccessDataSourceをバインドさせたGridView、
テキストボックス のコントロールを配置しています。

・AccessDataSource
[テーブルA]
 [名前][住所][電話][メモ][好きな人]

GridViewには、コマンド列とAccessDataSourceの[テーブルA]から[名前][住所][電話]のフィールドを表示させています。

コマンド列に設置したリンクを押すと、該当行の[好きな人]データをテキストボックスに表示します。


正直なところ、かなり作り込んでしまってまして今更DBへのアクセス方法とか変えたく無いのが本音です。
表現がちょっとアレですが、あー知ってる知ってるって方いらっしゃったら教えてくださいませ。

「AcceccDataSourceに対する」の質問画像

A 回答 (2件)

別の手段としてはADO.NETでコーディングしてしまうといった手法でしょうね



これでもSQLに手を加えることの代わりはないのですが
元のAccessDataSourceはいじりませんが
  If e.CommandArgument <> "" Then
    Dim accds As AccessDataSource = FindControl(GridView1.DataSourceID)
    Dim cnn As New OleDbConnection(accds.ConnectionString)
    ' GridViewの列からDBへの行特定要素取得
    Dim ss As String = GridView1.Rows(Integer.Parse(e.CommandArgument)).Cells(1).Text
    Dim cmd As New OleDbCommand("Select * FROM TableA where name='" & ss & "'", cnn)
    cnn.Open()
    ' DBにSQLを投げる
    Dim rd As OleDbDataReader = cmd.ExecuteReader()
    rd.Read()
    ' 6列目を取得
    Label1.Text = rd.GetString(5);
    rd.Close()
    cmd.Clone()
    cnn.Close()
  End If
    • good
    • 0
この回答へのお礼

またまたどうも、わざわざ夜中にコードまで書いて貰って申し訳ないです。
普通にVBやらC#でデータベースからデータ取り出すのと一緒っぽいですね。

DataSource貼り付けた時点で全テーブル(ないしはレコード)がロードされてて、簡単に好きな結果だけ取り出せると思ってたんですが、よくよく考えてみれば普通にありえないことを妄想してました。

お付き合い頂いて申し訳無いです。

お礼日時:2008/12/23 02:19

コマンド列にあるのは 1つのリンクでしょうか?


もともと『選択』だった物とか ・・・

であるなら その列をTemplateFieldに変換して
ItemTemplateにあるリンクのプロパティで『DataBindingsの編集』を実行
CommandArgumentを[好きな人]にします

GridViewのRowCommandイベントで
if IsPostBack then
  TextBox1.Text = e.CommandArgument
end if
といった具合でご希望の処理が出来そうですよ

AccessDataSourceのSQLに[好きな人]も含まれている前提ですが
    • good
    • 0
この回答へのお礼

ご意見どうも、
やっぱりAccessDataSourceのSQL文に手を入れないとダメっぽいんですねぇ。

お礼日時:2008/12/22 17:27

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!