ADO.NET と Visual Basic .NET を使用して、データベースに接続し、コマンドを実行する方法


Microsoft Visual C# .NET については、次の資料を参照してください。
306636 .
Microsoft Visual J# .NET については、次の資料を参照してください。
322045 .
Microsoft Visual Basic 6.0 については、次の資料を参照してください。
168336 .

この資料では、次の Microsoft .NET Framework クラス ライブラリの名前空間を参照しています。
  • System.Data
  • System.Data.SqlClient

この資料の内容

概要


この資料では、Visual Basic .NET コンソール アプリケーションを使用して、データベースに接続したり、UPDATE、INSERT、DELETE などのコマンドを実行したりするための ADO.NET の使用方法について説明します。

先頭に戻る

必要条件

必要なハードウェア、ソフトウェア、ネットワーク インフラストラクチャ、および Service Pack は次のとおりです。
  • Microsoft Windows XP、Microsoft Windows Server 2003、Microsoft Windows 2000 Professional、Microsoft Windows 2000 Server、Microsoft Windows 2000 Advanced Server、または Microsoft Windows NT 4.0 Server のいずれか
  • Microsoft Visual Studio .NET
この資料は、次のトピックについて詳しい知識のあるユーザーを対象としています。
  • データベースの用語
  • SQL (Structured Query Language)
先頭に戻る

コマンドの実行方法

データ ストアに対して操作を行うには、データベースに対してコマンドを発行します。コマンドには、データベースに対して発行できる任意のステートメントが含まれます。データ ストアに対するコマンドを取得するために、OleDbCommand クラスまたは SqlCommand クラスを使用できます。OleDbCommand は特定のデータ ストア専用に使用することができます。この資料では、ADO.NET 内で、SqlClient クラスを使用して Microsoft SQL Server を実行するコンピューターに接続する方法、および、OleDb クラスを使用して利用可能な OLE DB ドライバーまたは ODBC ドライバーを持つ任意のデータベースに接続する方法について説明します。ただし、一般的にどちらの場合もコードは同じです。

ADO を使用する場合は、Command、Connection、または Recordset オブジェクトを使用してコマンドを発行できます。ADO.NET では、Command オブジェクト (SqlCommand または OleDbCommand) でのみコマンドを実行できます。

コマンドを実行するには、以下の手順を実行します。
  1. 以下の手順を実行して、Visual Basic .NET で、新規のコンソール アプリケーションを作成します。
    1. Visual Studio .NET を起動します。
    2. [ファイル] メニューの [新規作成] をポイントし、[プロジェクト] をクリックします。
    3. [新しいプロジェクト] ダイアログ ボックスで、[プロジェクトの種類] ボックスの一覧の [Visual Basic プロジェクト] をクリックし、[テンプレート] ボックスの一覧の [コンソール アプリケーション] をクリックし、[OK] をクリックします。
  2. プロジェクトに System.Data 名前空間への参照が設定されていることを確認します。設定されていない場合は、参照を追加します。
  3. System 名前空間と System.Data 名前空間に Imports ステートメントを使用して、以後のコードでこれらの名前空間の宣言を修飾する必要がないようにします。使用するコマンドに応じて、System.Data.SqlClient 名前空間または System.Data.OleDb 名前空間を含めることもできます。
    Imports System
    Imports System.Data
    Imports System.Data.SqlClient
  4. データベースへの接続を確立するには、接続文字列を用意する必要があります。接続文字列には、サーバー名、データベース名、ユーザー ID、パスワードなど、データベースへの接続を確立するために必要な情報がすべて含まれます。たとえば、次の接続文字列は、<username> アカウントに複雑なパスワードを使用している SQL Server を実行するローカル コンピューターを指しています。

    OleDb 接続の場合の例を以下に示します。
    Provider=SQLOLEDB.1;User ID=<username>;Password=<strong password>;Initial Catalog=pubs;Data Source=(local)
    SqlClient 接続の場合の例を以下に示します。
    User ID=<username>;Password=<strong password>;Initial Catalog=pubs;Data Source=(local)
    注: 使用しているデータベースに対する接続文字列を確認する方法の詳細については、次のマイクロソフト Web サイトの MSDN (Microsoft Developer Network) ライブラリにアクセスし、「ConnectionString」を検索してください。
  5. Visual Studio により、モジュールと空の Main() プロシージャが作成されます。文字列変数を宣言して、このプロシージャにデータベース用の適切な接続文字列を格納します。
    Sub Main()
    Dim sConnectionString As String _
    = "User ID=<username>;Password=<strong password>;Initial Catalog=pubs;Data Source=(local)"
    End Sub
  6. この接続文字列を使用して、新しい OleDbConnection オブジェクトまたは SqlConnection オブジェクトを作成します。作成したオブジェクトの Open メソッドを呼び出して、データベースへの接続を確立します。
    Dim objConn As New SqlConnection(sConnectionString)
    objConn.Open()
  7. SqlCommand オブジェクトまたは OleDbCommand オブジェクトを作成します。このオブジェクトに、実行するコマンドと前の手順で作成した接続オブジェクトを渡します。次のサンプル コードでは INSERT ステートメントを渡しています。
    Dim sSQL As String = "INSERT INTO Employee " & _
    "(emp_id, fname, minit, lname, job_id, job_lvl, pub_id, hire_date)" & _
    "VALUES ('MSD12923F', 'Duncan', 'W', 'Mackenzie', " & _
    "10, 82,'0877','2001-01-01')"
    Dim objCmd As New SqlCommand(sSQL, objConn)
  8. SqlCommand オブジェクトまたは OleDbCommand オブジェクトを作成したら、ExecuteNonQuery メソッドを呼び出して、オブジェクトが表すコマンドを実行できます。ExecuteNonQuery は結果を返さないコマンド (DELETE、UPDATE、および INSERT ステートメントなど) 用に設計されています。Execute ステートメントが実行されて例外がスローされない場合 (次のコードを参照してください)、コマンドはデータベースに対して正常に実行されています。
    objCmd.ExecuteNonQuery()
  9. プロジェクトを保存します。[デバッグ] メニューの [開始] をクリックして、データベースに対してコマンドを実行します。
先頭に戻る

パラメーターの使用方法

データベースに対してコマンド (UPDATE、INSERT、DELETE などのステートメントまたはストアド プロシージャの呼び出し) を実行する場合、これらのコマンドにパラメーターを含めることができます。コマンドをパラメーター化することにより、コマンドを 1 つだけ作成し、パラメーターにさまざまな値を設定して、何度も実行することができます。上の例で使用した INSERT ステートメントに対応する DELETE ステートメントを次に示します。
Dim sSQL As String = "DELETE FROM Employee WHERE emp_id = @emp_id"
この DELETE ステートメントのパラメーター名 ("@emp_id") は、コマンドを実行するたびに異なる値に置き換えることのできるパラメーターを表します。

コマンドでパラメーターを使用するには、以下の手順を実行します。
  1. コマンドの実行方法」の手順と同じように、OleDbConnection オブジェクトまたは SqlConnection オブジェクトを作成します。
  2. コマンド テキストでパラメーターを使用できるように、値をプレースホルダー ("@emp_id" または "@fname" など) に置き換えます。上記の DELETE ステートメントの例を参照してください。
  3. OleDbCommand オブジェクトまたは SqlCommand オブジェクトを作成します。作成したオブジェクトに、最初の手順で作成した接続オブジェクトおよびパラメーターのプレースホルダーを含むコマンド テキストを渡します。
  4. パラメーターごとに、コマンド オブジェクトのパラメーター コレクションにパラメーター オブジェクトを追加します。パラメーターごとに、名前とデータ型を指定する必要があります。
    objCmd.Parameters.Add("@emp_id", SqlDbType.Char, 9)
  5. ストアド プロシージャは、値と出力パラメーターを返すパラメーターを持つことができます。クエリを実行する前に、各入力パラメーターにも値を設定する必要があります。
    objCmd.Parameters.Item("@emp_id").Value = "MSD12923F"
  6. 次のクエリを実行します。
    Try
    objCmd.ExecuteNonQuery()
    Console.WriteLine("Record Deleted")
    Catch e As Exception
    Console.WriteLine(e.ToString)
    End Try
    Console.WriteLine("Record Deleted")
    Console.Read()
先頭に戻る

完全なコード リスト

Imports System
Imports System.Data
Imports System.Data.SqlClient

Module Module1
Sub Main()
AddRecord()
RemoveRecord()
Pause()
End Sub

Sub Pause()
Console.WriteLine("Press Enter To Continue...")
Console.ReadLine()
End Sub

Sub AddRecord()
Dim sConnectionString As String _
= "User ID=<username>;Password=<strong password>;Initial Catalog=pubs;Data Source=(local)"
Dim objConn As New SqlConnection(sConnectionString)
objConn.Open()
Dim sSQL As String = "INSERT INTO Employee " & _
"(emp_id, fname, minit, lname, job_id, job_lvl, pub_id, hire_date)" & _
"VALUES ('MSD12923F', 'Duncan', 'W', 'Mackenzie', " & _
"10, 82,'0877','2001-01-01')"

Dim objCmd As New SqlCommand(sSQL, objConn)
Try
objCmd.ExecuteNonQuery()
Catch e As Exception
Console.WriteLine(e.Message)
End Try
Console.WriteLine("Record Added")
End Sub

Sub RemoveRecord()
Dim sConnectionString As String _
= "User ID=<username>;Password=<strong password>;Initial Catalog=pubs;Data Source=(local)"
Dim objConn As New SqlConnection(sConnectionString)
objConn.Open()
Dim sSQL As String = "DELETE FROM Employee WHERE emp_id = @emp_id"
Dim objCmd As New SqlCommand(sSQL, objConn)

objCmd.Parameters.Add("@emp_id", SqlDbType.Char, 9)
objCmd.Parameters.Item("@emp_id").Value = "MSD12923F"

Try
objCmd.ExecuteNonQuery()
Console.WriteLine("Record Deleted")
Catch e As Exception
Console.WriteLine(e.ToString)
End Try
Console.WriteLine("Record Deleted")
Console.ReadLine()
End Sub

End Module
先頭に戻る

関連情報


ADO.NET、データベース コマンド、およびストアド プロシージャの使用方法の詳細については、以下のマイクロソフト Web サイトを参照してください。
SQL Server 2000 ストアド プロシージャ
http://msdn.microsoft.com/ja-jp/library/aa174792.aspx

MSDN Voices のコラム「Revisiting the Use of ADO in .NET Applications」
http://msdn.microsoft.com/ja-jp/library/ms810295.aspx

ADO プログラマのための ADO.NET
http://msdn.microsoft.com/ja-jp/library/ms973217.aspx

Microsoft .NET Framework Developer Center
http://msdn.microsoft.com/ja-jp/vstudio/default.aspx
先頭に戻る