閲覧総計:15851 (本日:1 昨日:0)
MS-AccessDBをOleDbでハンドリングするのはASP.NET1.X時代の古い手法であるが、
現在(ASP.NET3.5)においても、シンプルで簡便・確実なMS-AccessDBをハンドリングする
手法であり、まだまだ現役手法であると考える。
今回はMS-AccessDBをOleDb手法で挿入・更新・抽出・削除する方法を確認したので
備忘を残しておく。 2010/11/14
ちなみにASP.NET2.0から各種DBのハンドリングは「データソースコントロール」に統
一され、DBがMS-Access、SQL Server、Oracle等である事をユーザが意識しなくて良い
統一コードで記述出来る様に改良されている。
↓「データソース・コントロールでいってみよう(前編)」 06/07/29
http://www.atmarkit.co.jp/fdotnet/vs2005db/vs2005db_06/vs2005db_06_03.html
ただし、コード記述はFactoryメッソドを使う等多少複雑になるのが短所である。
使用するDBがMS-Accessに固定されている場合にはOleDB手法でDBをハンドリングする
方が確実・効率的と考えた。 2010/11/14
【使用DBテーブル構造】
Accessデータベース名:AccessDB.mdb
テーブル名:得意先テーブル
フィールド名 | データ型 | フィールドサイズ |
---|---|---|
得意先ID (主キー) | オートナンバー型 | 長整数型 |
社名 | テキスト型 | 40 |
担当者名 | テキスト型 | 30 |
電話 | テキスト型 | 24 |
【目次】項目をクリックするとその記事に飛べます。
【稼働画面】
【Insert.aspx】
<%@ Page Language="VB" %> <%@ Import Namespace="System.Data.OleDb" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <script runat="server"> Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) 'AccessDBにOleDbで接続 Using con As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\AccessDB.mdb") 'OleDbでのパラメータ設定はPositional Parameter方式(Values(?, ?, ?))で設定 Dim cmd As New OleDbCommand("Insert Into [得意先テーブル] ([社名], [担当者名], [電話]) Values(?, ?, ?)", con) 'ParametersコレクションのValueプロパティの省略形記法 cmd.Parameters.Add(New OleDbParameter("@CompanyName", "フレンドリーソフト")) cmd.Parameters.Add(New OleDbParameter("@ContactName", "葛西 秋雄")) cmd.Parameters.Add(New OleDbParameter("@Phone", "0480-99-9999")) 'ParametersコレクションのValueプロパティの正式記法 'cmd.Parameters.Add("@CompanyName", OleDbType.VarWChar, 40) 'cmd.Parameters("@CompanyName").Value = "フレンドリーソフト" 'cmd.Parameters.Add("@ContactName", OleDbType.VarWChar, 30) 'cmd.Parameters("@ContactName").Value = "葛西 秋雄" 'cmd.Parameters.Add("@Phone", OleDbType.VarWChar, 24) 'cmd.Parameters("@Phone").Value = "0480-99-9999" con.Open() 'クエリの実行(INSERTクエリの場合は結果セットを返さないExecuteNonQuery) cmd.ExecuteNonQuery() '新規挿入したデータのIDを取得する方法 cmd.CommandText = "Select @@Identity" Dim intCustomerID As Integer = cmd.ExecuteScalar() Label1.Text = String.Format("得意先ID <b>{0}</b> を追加しました.", intCustomerID.ToString()) End Using End Sub </script> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> </head> <body> <form id="form1" runat="server"> <div> OleDbでデータInsert(挿入)処理 10/11/13<br /> <br /> 参考ページ:<a href="http://asp35.com/adoAccess/Chapter1/ch1-06.aspx">SQLのInsertにパラメータを指定してレコードを追加するサンプル</a><br /> <br /> <asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="データ挿入" /> <br /> <br /> <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label> <br /> </div> </form> </body> </html>
【参考にしたページ】
↓SQLのInsertにパラメータを指定してレコードを追加するサンプル
http://asp35.com/adoAccess/Chapter1/ch1-06.aspx
【稼働画面】
【Update.aspx】
<%@ Page Language="VB" %> <%@ Import Namespace="System.Data.OleDb" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <script runat="server"> Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) 'AccessDBにOleDbで接続 Using con As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\AccessDB.mdb") 'OleDbでのパラメータ設定はPositional Parameter方式(Set [電話] = ? Where [社名] = ?)で設定 Dim cmd As New OleDbCommand("Update [得意先テーブル] Set [電話] = ? Where [社名] = ?", con) 'ParametersコレクションのValueプロパティの省略形記法 cmd.Parameters.Add(New OleDbParameter("@Phone", "0480-88-8888")) cmd.Parameters.Add(New OleDbParameter("@CompanyName", "フレンドリーソフト")) 'ParametersコレクションのValueプロパティの正式記法 'cmd.Parameters.Add("@Phone", OleDbType.VarWChar, 24) 'cmd.Parameters("@Phone").Value = "0480-99-9999" 'cmd.Parameters.Add("@CompanyName", OleDbType.VarWChar, 40) 'cmd.Parameters("@CompanyName").Value = "フレンドリーソフト" con.Open() 'クエリの実行(Updateクエリの場合は結果セットを返さないExecuteNonQuery) Dim intUpdateCount As Integer = cmd.ExecuteNonQuery() Label1.Text = String.Format("<b>{0}</b> 件の得意先を更新しました.", intUpdateCount.ToString()) End Using End Sub </script> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> </head> <body> <form id="form1" runat="server"> <div> OleDbでデータ更新(Update)処理 10/11/13<br /> <br /> 参考ページ:<a href="http://asp35.com/adoAccess/Chapter1/ch1-07.aspx">SQLのUpdateにパラメータを指定してレコードを更新するサンプル</a><br /> <br /> <asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="データ更新" /> <br /> <br /> <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label> <br /> </div> </form> </body> </html>
【参考にしたページ】
↓SQLのUpdateにパラメータを指定してレコードを更新するサンプル
http://asp35.com/adoAccess/Chapter1/ch1-07.aspx
【稼働画面】
【Select.aspx】
<%@ Page Language="VB" %> <%@ Import Namespace="System.Data.OleDb" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <script runat="server"> Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) 'AccessDBにOleDbで接続 Using con As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\AccessDB.mdb") 'OleDbでのパラメータ設定はPositional Parameter方式(Where [社名] = ?)で設定 Dim cmd As New OleDbCommand("Select * From [得意先テーブル] Where [社名] = ?", con) 'ParametersコレクションのValueプロパティの省略形記法 cmd.Parameters.Add(New OleDbParameter("@CompanyName", "フレンドリーソフト")) 'ParametersコレクションのValueプロパティの正式記法 'cmd.Parameters.Add("@CompanyName", OleDbType.VarWChar, 40) 'cmd.Parameters("@CompanyName").Value = "フレンドリーソフト" con.Open() 'クエリの実行(Selectクエリの場合は結果セットを返すExecuteReader) Dim dr As OleDbDataReader = cmd.ExecuteReader() Do While dr.Read() 'Label1.Text &= dr.GetValue(0) & ":" & dr.GetValue(1) & "<br />" Label1.Text &= dr("得意先ID") & ":" & dr("社名") & " " & dr("担当者名") & "<br />" Loop dr.Close() End Using End Sub </script> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> </head> <body> <form id="form1" runat="server"> <div> OleDbでデータ抽出(Select)処理 10/11/13<br /> <br /> 参考ページ:<a href="http://asp35.com/adoAccess/Chapter1/ch1-09.aspx">SQLのSelectにパラメータを指定してレコードを抽出するサンプル</a><br /> <br /> <asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="データ抽出" /> <br /> <br /> <asp:Label ID="Label1" runat="server" Text=""></asp:Label> <br /> </div> </form> </body> </html>
【参考にしたページ】
↓SQLのSelectにパラメータを指定してレコードを抽出するサンプル
http://asp35.com/adoAccess/Chapter1/ch1-09.aspx
【稼働画面】
【Delete.aspx】
<%@ Page Language="VB" %> <%@ Import Namespace="System.Data.OleDb" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <script runat="server"> Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) 'AccessDBにOleDbで接続 Using con As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\AccessDB.mdb") 'OleDbでのパラメータ設定はPositional Parameter方式(Where [社名] = ?)で設定 Dim cmd As New OleDbCommand("Delete * From [得意先テーブル] Where [社名] = ?", con) 'ParametersコレクションのValueプロパティの省略形記法 cmd.Parameters.Add(New OleDbParameter("@CompanyName", "フレンドリーソフト")) 'ParametersコレクションのValueプロパティの正式記法 'cmd.Parameters.Add("@CompanyName", OleDbType.VarWChar, 40) 'cmd.Parameters("@CompanyName").Value = "フレンドリーソフト" con.Open() 'クエリの実行(Deleteクエリの場合は結果セットを返さないExecuteNonQuery) Dim intDeleteCount As Integer = cmd.ExecuteNonQuery() Label1.Text = String.Format("<b>{0}</b> 件の得意先を削除しました.", intDeleteCount.ToString()) End Using End Sub </script> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> </head> <body> <form id="form1" runat="server"> <div> OleDbでデータ削除(Delete)処理 10/11/14<br /> <br /> 参考ページ:<a href="http://asp35.com/adoAccess/Chapter1/ch1-08.aspx">SQLのDeleteにパラメータを指定してレコードを削除するサンプル</a><br /> <br /> <asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="データ削除" /> <br /> <br /> <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label> <br /> </div> </form> </body> </html>
【参考にしたページ】
↓SQLのDeleteにパラメータを指定してレコードを削除するサンプル
http://asp35.com/adoAccess/Chapter1/ch1-08.aspx