次の方法で共有


ASP.NET データ アクセス

.NET Framework には、ADO を改良した ADO.NET という名前の新しいアクセス技術が含まれています。しかし、ADO.NET を構成するクラスは、従来の ADO オブジェクトとは異なります。既存の ADO アプリケーションを ADO.NET に変換するために、そのアプリケーションに対してある程度の変更を加える必要があります。しかし、ADO は ASP.NET の下でも機能するため、すぐに既存の ADO アプリケーションを ASP.NET 下で実行できるように変更する必要はありません。それでもなお、ADO アプリケーションを ADO.NET に変換するだけの価値はあります。非接続型のアプリケーションの場合、ADO.NET によって ADO の非接続型レコードセットのパフォーマンスが向上します。ADO では送受信するコンポーネントは COM オブジェクトであることが必要ですが、ADO.NET では標準 XML 形式でデータを送信するため、COM マーシャリングまたは型変換は不要です。

通常、データベースから取り出されるデータは、次のいずれかの方法で使用されます。レコードは、クライアントに直接表示しなくても、その他のアクションに対する原型として、ASP コードによって調べたり、操作したりすることができます。また、クライアントに対してテーブルまたはグリッドで単純に表示することもできます。このトピックの例では、一般的な ADO シナリオを ADO.NET に変換する方法を示しています。ADO.NET モデルについては、ここに示す簡単な例よりも、はるかに多くの情報を提供しています。ここでは、一般的な ASP シナリオおよび ADO シナリオを .NET Framework に移植する方法を簡単に説明するだけにとどめています。ADO.NET の詳細については、「ADO.NET の概要」を参照してください。

単一のテーブルの使用

次の例のコードの最初のブロックは、ADO を使用して単一の SQL クエリから返されるレコードのセットを読み取り操作する ASP アプリケーションの典型的な例です。ここでは、ADO Recordset オブジェクトを使用して、Microsoft Access と共に提供されている Northwind サンプル データベースから返されるデータ レコードを読み取ります。このコードは、.asp ファイル名拡張子付きのファイルに格納されています。

<%@LANGUAGE=VBSCRIPT%>
<! 
This ASP example uses ADO to read records from a database and print two
fields from all returned records to an ASP page. Connection to the Northwind database is through an ODBC system data source (DSN). 
>
<html>
<body>
<%
   dim ADOconn, ADOrs, sqlstr
   sqlstr="SELECT * FROM Employees;"
   set ADOconn = Server.CreateObject("ADODB.Connection")
   ADOconn.Open "DSN = Test"
   set ADOrs = ADOconn.execute(sqlstr) 
   if ADOrs.BOF and ADOrs.EOF then ' Query didn't return any records.
      Response.Write("No Records.")
   else
      ADOrs.MoveFirst
      Do While Not ADOrs.EOF
         Response.Write(Server.HtmlEncode(ADOrs("FirstName")) & " " _
            & Server.HtmlEncode(ADOrs("LastName")) & "<br>")
         ADOrs.MoveNext
      Loop
      Response.Write("<p>End of data.")   
   end if
   ADOrs.close
   set ADOrs = nothing
%>
</body>
</html>

上の例を ASP.NET アプリケーションに変換するのに必要な最小の変更を次に示します。ほとんどの変更は、新しい Visual Basic 構文に準拠している必要があります。このファイルは、.aspx ファイル名拡張子で名前を変更できます。ASP.NET の更新された行が太字で表示されます。aspcompat=true 属性が指定された <%@ Page > ディレクティブが最初の行に追加されます。

<%@Page aspcompat=true Language = VB%>
<! 
This example uses ADO to read records from a database and print two
fields from all records in the database to an ASP.NET page. 
The database is located on the server and connection is through an ODBC system data source (DSN).
>
<html>
<body>
<%
   dim objConn, rs, sqlstr
   sqlstr="SELECT * FROM Employees;"
   objConn = Server.CreateObject("ADODB.Connection") ' Set removed.objConn.Open("DSN=TEST") ' Parentheses added.rs = objConn.execute(sqlstr) ' Set statement removed.
   Response.Write("<p>ADO Test</p>")

   if rs.BOF and rs.EOF then ' Query didn't return any records.
      Response.Write("No Records")
   else
      rs.MoveFirst
      Do While Not rs.EOF
         ' Specify Value property.
         Response.Write(Server.HtmlEncode(rs("FirstName").Value) _
            & " " & Server.HtmlEncode(rs("LastName").Value) & "<br>")
         rs.MoveNext
      Loop
      Response.Write("<p>End of data")
   end if
   rs.close
   rs = nothing ' Set statement removed.
%>

ADO.NET を使用して上記の例と同じ Northwind データベースからレコードを読み込む ASP.NET アプリケーションの例を次に示します。このコードによって生成される出力は上記の例の出力と等価ですが、ASP.NET コード ブロック規則に従うように変更されています。

この例では、ADO.NET DataSet オブジェクトを作成しますが、この場合、ADO の Recordset とほとんど同じ方法で使用されるデータ テーブルが 1 つ含まれています。DataSet は、メモリ常駐データベースを形成する、DataTablesDataRelations、および Constraints の 1 つ以上のコレクションから構成できます。したがって、ADO.NET DataSet の方が、ADO Recordset に比べてより柔軟性があります。

ADO.NET を使用するためには、System.Data 名前空間と System.Data.OleDb 名前空間を使用する必要があります。データ ソースが SQL Server データベースの場合は、System.Data.OleDb 名前空間の代わりに、System.Data.SqlClient 名前空間をインポートします。ADO データ プロバイダおよび SQL .NET データ プロバイダに対する接続オブジェクトの使用については、「接続の管理」を参照してください。

<%@Import Namespace="System.Data"%>
<%@Import Namespace="System.Data.OleDb"%>
<! 
This example uses ADO.NET to read records from a database and print two
fields from all returned records to an ASP.NET page. The database
is located on the local server.
>
<html>
<Script Language=VB Runat=Server>
   Sub Page_Load(Sender As Object, e As EventArgs)
      Dim MyConnection As OleDbConnection
      Dim MyCommand As OleDbDataAdapter
      dim MyDataset As DataSet
      dim MyTable As DataTable
      dim loop1, numrows As Integer
      dim sqlstr As String
      
      sqlstr = "SELECT * FROM Employees;"
      
      ' Create a connection to the data source. 
      MyConnection = New OleDbConnection("Provider=SQLOLEDB;" _
         & "server=localhost;"Integrated Security=SSPI;" _ 
         & "Initial Catalog=Northwind")

      ' Create a Command object with the SQL statement.
      MyCommand = New OleDbDataAdapter(sqlstr, MyConnection)

      ' Fill a DataSet with data returned from the database.
      MyDataset = New DataSet
      MyCommand.Fill(MyDataset)
      
      ' Create a new DataTable object and assign to it
      ' the new table in the Tables collection.
      MyTable = New DataTable
      MyTable = MyDataset.Tables(0)
      ' Find how many rows are in the Rows collection 
      ' of the new DataTable object.
      numrows = MyTable.Rows.Count
       If numrows = 0 then
         Response.Write("<p>No records.</p>")
      Else
         Response.Write("<p>" & Cstr(numrows) & " records found.</p>")
         For loop1 = 0 To numrows - 1
            ' Print the values of the two columns in the Columns
            ' collection for each row.
            Response.Write(Server.HtmlEncode(MyTable.Rows(loop1).Item("FirstName")) _
               & " " & Server.HtmlEncode(MyTable.Rows(loop1).Item("LastName")) & "<br>")
         Next loop1
      End If
      Response.Write("<p>End of data.</p>")   
   End Sub
</Script>
</html>

データベース クエリ (複数テーブル結合クエリの場合も含めて) が 1 つのレコードのセットを返す場合は、ADO レコードセットを使用するのとほぼ同じ方法で 1 つの DataTable (この例の MyTable) を使用できます。

複数のデータベース テーブルの使用

ADO.NET DataSet には、複数のテーブルおよびリレーショナル データベースのローカル コピーを記述するリレーションシップのセットを格納できます。これは、サーバー メモリ内にあるミニデータベースの役割を果たします。リレーションシップ オブジェクトを使用すると、これ以上メイン データ ストアに対してクエリを行わなくても、コードはテーブルのコレクションの中を移動して複雑な方法でデータ レコードにアクセスできます。DataSet のコンポーネントの詳細については、「ADO.NET DataSet」を参照してください。

コントロールでのデータの表示

ブラウザでデータベースのデータを表形式で表示するには、コードに HTML タグ付きのデータを挿入して、実行時に HTML テーブルを作成するように記述している必要があります。ASP.NET には、Web ページ上に表形式のデータを表示する処理を大幅に簡素化する DataGridDataListRepeater の各サーバー コントロールが含まれています。ADO.NET データセットは、これらのコントロールに簡単に連結できます。ASP.NET エンジンは、コントロールと連動して、純粋な HTML 3.2 をブラウザに送り、ユーザーのために書式を豊富に備えたレイアウトを生成します。

これらのコントロールを使用してデータベースのデータを表示する例については、「DataGrid コントロールへの SQL データの連結」、「DataList コントロールへの SQL データの連結」、および「Repeater コントロールへの SQL データの連結」を参照してください。

参照

ADO.NET を使用したデータのアクセス | ASP ページから ASP.NET への移行