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

文書翻訳 文書翻訳
文書番号: 306636 - 対象製品
この記事は、以前は次の ID で公開されていました: JP306636
すべて展開する | すべて折りたたむ

目次

概要

この資料では、ADO 2005 または ADO.NET を使用してデータベースに接続し、コマンドを実行する方法について、手順を追って説明します。

必要条件

必要なハードウェア、ソフトウェア、ネットワーク インフラストラクチャ、および Service Pack は次のとおりです。
  • Microsoft Windows Server 2003、Microsoft Windows 2000 Professional、Windows 2000 Server、Windows 2000 Advanced Server、または Microsoft Windows NT 4.0 Server
  • Microsoft Visual Studio 2005 または 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. 以下の手順を実行して、Microsoft Visual C# 2005 または Microsoft Visual C# .NET で新しいコンソール アプリケーションを作成します。
    1. Microsoft Visual Studio 2005 または Microsoft Visual Studio .NET を起動します。
    2. [ファイル] メニューの [新規作成] をポイントし、[プロジェクト] をクリックします。
    3. [新しいプロジェクト] ダイアログ ボックスで [プロジェクトの種類] ボックスの一覧の [Visual C# プロジェクト] をクリックし、[テンプレート] ボックスの一覧の [コンソール アプリケーション] をクリックします。

      : Visual Studio 2005 では、[新しいプロジェクト] ダイアログ ボックスの [プロジェクトの種類] の下の [Visual C#] をクリックし、[テンプレート] の下の [コンソール アプリケーション] をクリックします。
  2. プロジェクトに System.Data 名前空間への参照が設定されていることを確認します。設定されていない場合は、参照を追加します。
  3. System 名前空間と System.Data 名前空間に using ステートメントを使用して、以後のコードでこれらの名前空間の宣言を修飾する必要がないようにします。使用するコマンドによっては、System.Data.SqlClient 名前空間または System.Data.OleDb 名前空間を含めることもできます。
    using System;
    using System.Data;
    using System.Data.SqlClient;
    					
  4. データベースへの接続を確立するには、接続文字列を用意する必要があります。接続文字列には、サーバー名、データベース名、ユーザー ID、パスワードなど、データベースへの接続を確立するために必要な情報がすべて含まれます。たとえば、次の接続文字列は、SQL Server を実行するローカル コンピュータを指しています。

    OleDb 接続の場合の例を以下に示します。

    : ユーザー ID <UID> には、データベースに対してこの操作を実行するのに必要な権限が付与されている必要があります。
    Provider=SQLOLEDB.1;User ID=<UID>;Initial Catalog=pubs;Data Source=(local)
    						
    SqlClient 接続の場合の例を以下に示します。
    User ID=<UID>;Initial Catalog=pubs;Data Source=(local)
    						
    : 使用しているデータベースに対する接続文字列を確認する方法の詳細を参照するには、次の Microsoft Developer Network (MSDN) ライブラリにアクセスし、「ConnectionString」を検索してください。
    http://search.microsoft.com/search/search.aspx?View=ja-jp&st=a
  5. Visual Studio により静的クラスと空の Main() プロシージャが作成されます。このプロシージャで文字列変数を宣言し、適切なデータベースの接続文字列を格納します。

    : ユーザー ID <UID> には、データベースに対してこの操作を実行するのに必要な権限が付与されている必要があります。
    class Class1
    {
    	static void Main(string[] args)
    	{
    		string sConnectionString = 
    "User ID=<UID>;Initial Catalog=pubs;Data Source=(local)";
    	}
    }
    					
  6. この接続文字列を使用して、新しい OleDbConnection オブジェクトまたは SqlConnection オブジェクトを作成します。作成したオブジェクトの Open メソッドを呼び出して、データベースへの接続を確立します。
    SqlConnection objConn = new SqlConnection(sConnectionString);
    objConn.Open();
    					
  7. SqlCommand オブジェクトまたは OleDbCommand オブジェクトを作成します。このオブジェクトに、実行するコマンドと手順 6. で作成した接続オブジェクトを渡します。次のサンプル コードでは INSERT ステートメントを渡しています。
    string sSQL = "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')";
    SqlCommand objCmd = new SqlCommand(sSQL,objConn);
    					
  8. SqlCommand オブジェクトまたは OleDbCommand オブジェクトを作成した後、ExecuteNonQuery メソッドを呼び出して、オブジェクトが表すコマンドを実行できます。ExecuteNonQuery は結果を返さないコマンド (DELETE、UPDATE、および INSERT ステートメントなど) 用に設計されています。ステートメントが実行されて例外がスローされない場合 (次のコードを参照してください)、コマンドはデータベースに対して正常に実行されています。
    objCmd.ExecuteNonQuery();
    					
  9. プロジェクトを保存します。[デバッグ] メニューの [開始] をクリックして、データベースに対してコマンドを実行します。

パラメータの使用方法

データベースに対してコマンド (UPDATE、INSERT、DELETE などのステートメントまたはストアド プロシージャの呼び出し) を実行する場合、これらのコマンドにパラメータを含めることができます。コマンドをパラメータ化することにより、コマンドを 1 つだけ作成し、パラメータにさまざまな値を設定して、何度も実行することができます。上の例で使用した INSERT ステートメントに対応する DELETE ステートメントを次に示します。
string sSQL = "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["@emp_id"].Value = "MSD12923F";
    					
  6. 次のクエリを実行します。
    try 
    {
    	objCmd.ExecuteNonQuery();
    }
    catch (System.Exception e) 
    {
    	Console.WriteLine(e.Message);
    }
    Console.WriteLine("Record Deleted");
    					

完全なコード リスト

: このコードを実行する前に、User ID =<UID> を適切な値に変更する必要があります。<UID> に、データベースに対してこの操作を実行するのに必要な権限が付与されていることを確認してください。
using System;
using System.Data;
using System.Data.SqlClient;

    /// <summary>
    /// Summary description for Class1.
    /// </summary>
    class Class1
    {
	static void Main(string[] args)
	{
		AddRecord();
		RemoveRecord();
		Pause();
	}

	static void Pause()
	{
		Console.WriteLine("Press Enter To Continue....");
		Console.ReadLine();
	}

	static void AddRecord()
	{
		string sConnectionString = "User ID=<UID>;Initial Catalog=pubs;Data Source=(local)";
		SqlConnection objConn = new SqlConnection(sConnectionString);
		objConn.Open();
		string sSQL = "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')";
		SqlCommand objCmd = new SqlCommand(sSQL,objConn);
		try 
		{
			objCmd.ExecuteNonQuery();
			}
		catch (System.Exception e) 
		{
			Console.WriteLine(e.Message);
		}
		Console.WriteLine("Record Added");
	}

	static void RemoveRecord()
	{
		string sConnectionString = "User ID=<UID>;Initial Catalog=pubs;Data Source=(local)";
		SqlConnection objConn = new SqlConnection(sConnectionString);
		objConn.Open();
		string sSQL = "DELETE FROM Employee WHERE emp_id = @emp_id";
		SqlCommand objCmd = new SqlCommand(sSQL,objConn);
		objCmd.Parameters.Add("@emp_id", SqlDbType.Char, 9);
		objCmd.Parameters["@emp_id"].Value = "MSD12923F";
		try 
		{
			objCmd.ExecuteNonQuery();
		}
		catch (System.Exception e) 
		{
			Console.WriteLine(e.Message);
		}
		Console.WriteLine("Record Deleted");
	}
} 
				

関連情報

ADO.NET、データベース コマンド、およびストアド プロシージャの使用方法の詳細については、以下のマイクロソフト Web サイトを参照してください。
ストアド プロシージャ
http://www.microsoft.com/japan/msdn/library/ja/createdb/cm_8_des_07_31vb.asp?frame=true

MSDN Online Voices のコラム「Diving into Data Access」
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dndive/html/data08092001.asp

ADO プログラマのための ADO.NET
http://www.microsoft.com/japan/msdn/net/upgrade/adonetprogmsdn.asp

.NET Framework
http://www.microsoft.com/japan/msdn/netframework/
詳細については、次の書籍を参照してください。
John Sharp、Jon Jagger 共著、『ステップバイステップで学ぶ Microsoft Visual C# .NET 実践講座 Vol.1 基礎編』および『ステップバイステップで学ぶ Microsoft Visual C# .NET 実践講座 Vol.2 活用編』 (日経 BP ソフトプレス刊、2002 年)
詳細については、次のマイクロソフト Web サイトを参照してください。
コース番号 : #2391『Microsoft ADO.NET によるプログラミング』 (英語トレーニング 2389 の日本語版)
http://www.microsoft.com/japan/learning/training/training.aspx?cert=1&cate=1&id=2391

プロパティ

文書番号: 306636 - 最終更新日: 2006年10月4日 - リビジョン: 4.1
この資料は以下の製品について記述したものです。
  • Microsoft Visual C# .NET 2002 Standard Edition
  • Microsoft Visual C# 2005
キーワード:?
kbhowtomaster kbsqlclient kbsystemdata KB306636
"Microsoft Knowledge Baseに含まれている情報は、いかなる保証もない現状ベースで提供されるものです。Microsoft Corporation及びその関連会社は、市場性および特定の目的への適合性を含めて、明示的にも黙示的にも、一切の保証をいたしません。さらに、Microsoft Corporation及びその関連会社は、本文書に含まれている情報の使用及び使用結果につき、正確性、真実性等、いかなる表明・保証も行ないません。Microsoft Corporation、その関連会社及びこれらの権限ある代理人による口頭または書面による一切の情報提供またはアドバイスは、保証を意味するものではなく、かつ上記免責条項の範囲を狭めるものではありません。Microsoft Corporation、その関連会社 及びこれらの者の供給者は、直接的、間接的、偶発的、結果的損害、逸失利益、懲罰的損害、または特別損害を含む全ての損害に対して、状況のいかんを問わず一切責任を負いません。(Microsoft Corporation、その関連会社 またはこれらの者の供給者がかかる損害の発生可能性を了知している場合を含みます。) 結果的損害または偶発的損害に対する責任の免除または制限を認めていない地域においては、上記制限が適用されない場合があります。なお、本文書においては、文書の体裁上の都合により製品名の表記において商標登録表示、その他の商標表示を省略している場合がありますので、予めご了解ください。"

フィードバック

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com