ASP.Net ObjectDataSource2について

このQ&Aのポイント
  • ASP.Net 初心者がObjectDataSourceを使ってグリッドビューの動的なWhere句に対応しようとしていますが、エラーが発生してしまいます。
  • GetMstTokDataSetメソッド内で、DbDataReaderの値をDataSetに変換しようとしてエラーが発生しています。
  • 質問者は自分で記述したSQL文を引数に入れて、ボタンコントロールからGetMstTokDataSetメソッドを呼び出してグリッドビューの内容を変更したいと考えています。しかし、上手くいかないようです。
回答を見る
  • ベストアンサー

ASP.Net ObjectDataSource2

お世話になります。 ASP.Net 初心者です。日夜修行をしているのですが、難解な壁に当たっております。 ASP.Net にてObjectDataSourceを作成し、 グリッドビューの動的なWhere句に対応させるべく 自分なりに、例題のプログラムを変形させて以下のようにさせました。 引数のSQLには 完成されたSQL文が入っております。 ObjectDataSource には MstTokDataSet.xsd を作成 その際にできたアダプターが t_MstTokTableAdapter になります。 一番簡単なプログラムを書き、動作するところまでいけば、あとは応用かなと思うのですが、 下記をデバックすると Return Comm.ExecuteReader(CommandBehavior.CloseConnection) 一番最後のこの部分で、下記のエラー表示されてしまいます。 エラー 1 型 'System.Data.Common.DbDataReader' の値を 'System.Data.DataSet' に変換できません。 まずは自分で記述したSQL文を引数に入れて、下記をボタンコントロールから実行してグリッドビューの内容を変更したいのですが、なかなかうまくいかないですね! (1)下記のプログラムの何が問題なのか? (2)考え方は正しいのか? とんちんかんな事をしてないでしょうか? (3)ボタンコントロールからこのメソッドを呼び出すにはどのようにすればよろしいのでしょうか? 上記(1)、(2)、(3)をご教授いただけますと大変助かります。 何卒よろしくお願い申し上げます。 ---------------------------------------------------------------------------------- Imports Microsoft.VisualBasic Imports System.ComponentModel Imports System.Data Imports System.Data.Common Imports System.Data.SqlClient Namespace MstTokDataSetTableAdapters Partial Public Class t_MstTokTableAdapter <DataObjectMethod(DataObjectMethodType.Select, False)> _ Public Function GetMstTokDataSet(ByVal SQL As String) As DataSet Dim Setting As ConnectionStringSettings = ConfigurationManager.ConnectionStrings("connectionString") Dim Factory As DbProviderFactory = DbProviderFactories.GetFactory(Setting.ProviderName) Dim DB As DbConnection = Factory.CreateConnection() DB.ConnectionString = Setting.ConnectionString Dim Comm As DbCommand = Factory.CreateCommand() Comm.Connection = DB Comm.CommandText = SQL DB.Open() Return Comm.ExecuteReader(CommandBehavior.CloseConnection)      ここでエラーになってしまいます。例題どおりやってるのですが・・・ End Function End Class End Namespace ----------------------------------------------------------------------------------

質問者が選んだベストアンサー

  • ベストアンサー
noname#259269
noname#259269
回答No.1

(1)(2) エラーメッセージのとおりです。 メソッドの戻り値を DataSet 型のオブジェクトと定義しているにもかかわらず、Return で DataReader 型のオブジェクトを返却しようとしています。 もう少し「型」というものを意識してプログラミングしましょう。 (3) ボタンのイベントプロシージャから呼び出すだけです。

kyokotan12
質問者

お礼

お世話になります。 ObjectDataSource とDBの接続方法、動的SQL文の設定、 そのほか、いろいろな接続、変更などの方法の仕方が未熟ゆえ わからない次第でございます。 まだグリッドビューの動的SQLの変更方法など、まだわたくしには早かったかなと質問の回答を見させていただき思って次第でございます。 まずは ご紹介いただいた、赤間本を読破、熟読し、グリッドビュー、リストビューの選定など、改めてご質問させて下さいませ。 その際には初心者にもわかるご回答お待ち申し上げております。 ありがとうございました。

kyokotan12
質問者

補足

edp3142さん お世話になります。 以下のURLの緑色の部分のプログラムを変形させただけなのですが、 こちらのプログラム自体の返り値の型が違っていると考えてよろしいのでしょうか? http://www.atmarkit.co.jp/fdotnet/vs2005db/vs2005db_07/vs2005db_07_02.html ちなみになんですが、最後はどう記述すればよいものでしょうか? 何卒よろしくお願い申し上げます。

関連するQ&A

  • ADO.NETの処理分岐について教えて下さい。

    クライアントから取得したIPアドレスとDBの登録が一致した場合のみフォームを 出力するアプリケーションを作成しているのですがDBの登録があってもエラーのフォームの 分岐に行ってしまいます。 どこが違うのでしょうか?教えて下さい。 ASP.NETを勉強し始めて間もないのでまだまだ勉強不足ですが宜しくお願い致します。 Imports System Imports System.Data Imports System.Data.SqlClient Imports Microsoft.VisualBasic Imports System.Text Partial Class INDEX Inherits System.Web.UI.Page Private Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load '------------- IPアドレス取得 -------------- Dim ipAddr As String ipAd = Request.UserHostAddress '------------- SQL Server Connection -------------- Dim myDataReader As SqlDataReader Dim mySqlConnection As SqlConnection Dim mySqlCommand As SqlCommand mySqlConnection = New SqlConnection("Server=Name;database=Source;UID=id;PWD=pw") mySqlCommand = New SqlCommand("SELECT * FROM IPdb WHERE IPAddress='" & ipAd & "' AND sub='True'") mySqlConnection.Open() mySqlCommand.Connection = mySqlConnection myDataReader = mySqlCommand.ExecuteReader(CommandBehavior.CloseConnection) Do While (myDataReader.Read()) Loop If Not (myDataReader Is Nothing) Then Response.Redirect("LoginError.aspx") Else End If myDataReader.Close() mySqlConnection.Close() End Sub End Class

  • ASP.NET

    VBで作成しています。 下記はSQLサーバーのデータベースを使ったプログラムですが、Microsoft Office Accessのデータベースを使う場合は、どのように変更すればいいでしょうか?教えて下さい。 お願いします。 <プログラム> Dim strSQL As String Dim sqlDa As SqlClient.SqlDataReader Dim dr As DataRow 'SQL文 strSQL = "SELECT * FROM Data1 Dim cmdSQL As New SqlClient.SqlCommand With cmdSQL .Connection = Action .CommandType = CommandType.Text .CommandText = strSQL End With Try Action.Open() sqlDa = cmdSQL.ExecuteReader (以下省略)

  • ASP.NETでSQL-SERVERへの接続方法

    最近、ASP.NETの勉強をはじめました。テキストを見ながらサンプルプログラムを作成しているのですが、SQL-SERVERへのDB接続方法がうまくいきません。 Dim conn As String = "data source=????;user id=sa;password=;initial catalog=SampleDb" Try   Dim objConn As New SqlClient.SqlConnection   objConn.ConnectionString() = conn   Dim comm As New SqlClient.SqlCommand(sql, objConn)   objConn.Open() ソース一番上の????の部分に何と記述すればいいかわかりません。テキストには localhost と記述されています。コンパネの「ODBCデータソース」のDSNやサーバ名を記述しても無理でした。 ASP開発で使用していたDB接続 Conn = "PROVIDER=SQLOLEDB;SERVER=サーバ名;DATABASE=YUSODB;UID=sa;PWD=;" を試したりしたのですが、無理でした。 どなたかご教授お願いします。

  • ASP.Net ObjectDataSource

    大変お世話になっております。 Webフォーム上にObjectDataSourceを配置しております。 GridViewのデータソースとして何の問題もなく動作しております。 この配置してある ObjectDataSource のデータ全件を取得したいのですが、 文法はめちゃくちゃだと思うのですが、下記のイメージのような 取得の仕方はありますでしょうか? 他の方法でも構いませんので、ご指摘、ご教授いただければと存じます。 Dim TEST As ObjectDataSource = ODS_TEST Dim buf As New StringBuilder   For Each row As TEST In ObjectDataSource.Rows     buf.Append(row.Cells("項目1").Text)       buf.Append(",")     buf.Append(row.Cells("項目2").Text)   Next  

  • 下記の環境でプログラムを作成していましたが、エラーが発生してしまいまし

    下記の環境でプログラムを作成していましたが、エラーが発生してしまいました。 対応わかる方がいらっしゃいましたら、教えてください。 OS:WindowsXP Pro プログラム:Microsoft Visual Basic 2008(Visual Studio 2008) DB:SQL Compact 3.5 参照設定:System.Data.SqlServerCe C:\Program Files\Microsoft SQL Server Compact Edition\v3.5\Desktop\System.Data.SqlServerCe.dll プログラム内容 Imports System.Data.SqlServerCe 1: Dim cn As New System.Data.SqlServerCe.SqlCeConnection 2: Dim SQL As System.Data.SqlServerCe.SqlCeCommand 3: Dim dr As System.Data.SqlServerCe.SqlCeDataReader 1のDB接続の宣言部分で エラー 1 基本クラス 'System.Data.Common.DbConnection' を含むアセンブリ 'System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' への参照が必要です。参照をプロジェクトに追加してください。 2と3も類似のエラーが発生しています。 いろいろ調べてみたら参照設定がされてないということがわかったんですが プロジェクト>追加 からの参照設定はしており、対策方法がみあたりません。 もし対策がわかりましたら教えてください。よろしくお願いします。

  • 共通モジュールでDBへの接続と利用方法

    VB.net のモジュールの引数にについての質問です。 やりたい事はSQLServerへの接続およびSELCT文を実行させることです DB側へのセッションをモジュールで作成し、 それを元に、他のモジュールやクラスファイルで selectやinsertを動かしたいと思っていますが、うまくいきません 「ExecuteReader には接続が開かれていて使用可能なことが必要です。 現在の接続の状態は終了です」というエラーが出てしまいます。 おそらく戻り値のあたりがおかしいのかなと思うのですが、 解決策がわかりません。 Module Connect Dim cn As System.Data.SqlClient.SqlConnection Public Function Connection() Try cn = New System.Data.SqlClient.SqlConnection() 'SQL Server認証を利用して接続 cn.ConnectionString = _ "Data Source = " & ServerName & _ ";Initial Catalog = " & DBName & _ ";User ID = " & UserID & _ ";Password = " & password 'Windows認証を利用して接続 'cn.ConnectionString = _ ' "Data Source = " & ServerName & _ ' ";Initial Catalog = " & DBName & _ ' ";Integrated Security = SSPI" cn.Open() MessageBox.Show("接続されました") Catch ex As Exception MessageBox.Show(ex.ToString) End Try Return cn End Function End Module Public Sub ExecuteReaderTest() Try Dim cn As New System.Data.SqlClient.SqlConnection Connection() Dim hCommand As System.Data.SqlClient.SqlCommand = cn.CreateCommand() hCommand.CommandText = "SELECT ~~ " Dim cReader As System.Data.SqlClient.SqlDataReader = hCommand.ExecuteReader() hCommand.Dispose() ......

  • エクセルからSQLの接続の仕方

    エクセルを使ってMSSQLに接続したいのですが、エラーがでて接続できません。 なぜでしょうか? [エラー内容] コンパイルエラー: ユーザー定義型は定義されれいません。 コードの下の部分で発生します。 Dim Cn As New System.Data.SqlClient.SqlConnection [コード] Private Sub CommandButton1_Click() Dim St As String Dim Cn As New System.Data.SqlClient.SqlConnection Dim SQL As System.Data.SqlClient.SqlCommand Dim ServerName As String Dim UserID As String Dim Password As String Dim DatabaseName As String ServerName = "TEST-PC" 'サーバー名(またはIPアドレス) UserID = "sa" 'ユーザーID Password = "password" 'パスワード DatabaseName = "TEST_DB_20140801" 'データベース St = "Server=" & ServerName & ";" & "User ID=" & UserID & ";" & "Password=" & Password & ";" & "Initial Catalog=" & DatabaseName Cn.ConnectionString = St SQL = Cn.CreateCommand SQL.CommandText = "SELECT * FROM LOG_DATA_XLINE" Cn.Open MsgBox (SQL.ExecuteScalar) Cn.Close SQL.Dispose Cn.Dispose End Sub

  • vb.netでデータベース(Access)を複数アクセス(編集)する方

    vb.netでデータベース(Access)を複数アクセス(編集)する方法について いつも大変お世話になっています。 vb.netでデータベース(Access)を複数アクセス(編集)する方法についてご教授願います。 'SQL文 Dim wrk_sql As String 'データベース Dim G_DATABASES As New System.Data.OleDb.OleDbConnection 'DBの型を定義 Dim dr As System.Data.OleDb.OleDbDataReader 'SQLの型を定義 Dim cmnd As New System.Data.OleDb.OleDbCommand 'データベースを開く G_DATABASES = DBOpen(D:\test\db1.mdb") 'データ抽出 ※1 wrk_sql = "SELECT * FROM TEST" wrk_sql &= " WHERE N_DATA = 0" cmnd.Connection = G_DATABASES cmnd.CommandText = wrk_sql 'コマンドの実行 dr = cmnd.ExecuteReader() While dr.Read() = True ' ………← ※2 End While <目的> [※1]で抽出した結果(複数行存在します)を保持したまま [※2]の中で同じDB(G_DATABASES)にアクセスし SELECT文で抽出した結果を保持したまま処理を続けたい。 <問題> ・実行時「指定したデータベースは既に開いている」とのエラーが表示。 ・DBの型の定義、SQLの型の定義 を複数用意してもエラーが表示。

  • 【ASP.NET】MySQLのテーブルレコードの検索結果について

    お世話になります。ASP.NETおよびMySQLに関する質問です。 現在、ASP.NETで開発をおこなっております。 データベースにはMySQLを使用しており、以下の内容でSELECT文を 発行してテーブルレコードを取得しております。 ------------------------------------------------------ Private Function fcSelect_Table As DataTable Dim dt As New DataTable 'DB接続文字列の設定 Dim connectionString As String connectionString = "server=localhost;database=db01;user id=xxx; password=xxx;" 'DB接続 Dim _Connection As New MySqlConnection(connectionString) _Connection.Open() Dim cmd As MySqlCommand = _Connection.CreateCommand() Dim dr As MySqlDataReader = Nothing Try 'SQL文の作成 sql.Length = 0 'SELECT sql.Append(" SELECT " & vbCrLf) sql.Append(" ,AFFI_CODE " & vbCrLf) sql.Append(" ,REGIST_NUM " & vbCrLf) sql.Append(" ,KIND " & vbCrLf) 'FROM sql.Append(" FROM TBL_TEST " & vbCrLf) 'WHERE sql.Append(" WHERE " & vbCrLf) sql.Append(" AND AFFI_CODE = '" & Trim(tfx_所属.Text) & "'" & vbCrLf) sql.Append(" AND REGIST_NUM = '" & Trim(tfn_登録番号.Text) & "'" & vbCrLf) sql.Append(" AND KIND = '" & DropDownList_種別.SelectedIndex & "'" & vbCrLf) 'MySQLCommand作成 cmd.CommandText = sql.ToString 'SQL文実行 dr = cmd.ExecuteReader()       // 正常処理されることを確認済 // ここにDataTable型オブジェクトdt にdrの内容を格納する処理が必要? Catch ex As Exception End Try Return dt End Function ------------------------------------------------------ 上記で取得した結果をDataTableに格納し、それを画面に表示させたいのですが、DataTableへの格納方法がわかりません。 どなたかご教授いただけないでしょうか?

  • ASP.Net ObjectDataSource4

    お世話になります。 ASP.Net 初心者です。日夜修行をしているのですが、難解な壁に当たっております。 グリッドビューのデータソースに 動的Where句を使用したい質問を以前にいつかさせていただいております。 そこで下記のようなプログラムをお教えいただきました。 テストとしまして、Webフォームには 本題のグリッドビュー、リストボックス、ボタンが配置しております。テストですので、リストボックスを選択後にボタンを押すと、ボタンクリックイベントにて、Where句を を作成し、下記のメソッドの引数である SQL に入れてメソッドを実行し、グリッドビューのデータを更新したいのですが、ボタンをクリックした際に、どのようにしてグリッドビューのObjectDataSourceの中にあるTableAdapterのメソッドを引き数とともに実行すればよいのか未だにわかりません。 (1)ボタンコントロールを押す、コードでSQL文を作成 (2)下記のTableAdapterのメソッドを(1)で作成した引数とともに実行 (3)グリッドビューのデータが更新される 上記のプロセスをボタンクリックイベントのプログラムでどうやって実現させればよいかがわかりません。 Protected Sub Button1_Click(sender As Object, e As System.EventArgs) Handles Button1.Click     Where 以下のSQL文を作成する     ●(ここがわからない)作成したSQL文を引き数にTableAdapterのメソッドを実行     グリッドビューが更新される End Sub 上記のようにボタンクリックイベントで実行したいのです。 普通はこういうやり方でやらないのでしょうか? なにぶん初心者なので、今しばらくおつきあいいただき、ご教授していただけますと 大変助かる次第でございます。 何卒よろしくお願いいたします。 ----------------------------------------------------------------------------------- Namespace MstTokDataSetTableAdapters   Partial Public Class t_MstTokTableAdapter     <DataObjectMethod(DataObjectMethodType.Select, False)> _     Public Function GetMstTokDataSet2(ByVal SQL As String) As DataTable       Adapter.SelectCommand = CommandCollection(0)       Adapter.SelectCommand.CommandText += " " + SQL       Dim Dt As DataTable = New MstTokDataSet.t_MstTokDataTable()       Adapter.Fill(Dt)       Return Dt     End Function   End Class End Namespace -----------------------------------------------------------------------------------

専門家に質問してみよう