CodeZine(コードジン)

特集ページ一覧

C#からSQLDMOコンポーネントを使ってSQL Serverを操作する方法

SQLDMOコンポーネントを利用したスクリプトの出力

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2007/08/13 14:00

SQLDMOコンポーネントを使うとSQL Serverからテーブル情報を取得したり、さまざまなスクリプトを出力したりすることができます。ここではデータベース名の取得からバックアップファイルからのリストアまで、SQLDMOを使った操作方法を紹介します。

目次

はじめに

 SQL Server 2000からSQL Server 2005に移行してずいぶん経ちますが、まだまだ、SQL Server 2000を利用しているケースも多いかと思います(私も利用しています)。

 ここでは、SQLDMOコンポーネントを利用してテーブルやビューの一覧などを取得し、スクリプト出力を行う手順を紹介したいと思います。

紹介する内容

  • SQL Server一覧を取得する
  • データベース一覧を取得する
  • テーブル一覧を取得する
  • ビュー一覧を取得する
  • プロシージャ一覧を取得する
  • スクリプトの作成
  • データベースのバックアップ
  • バックアップファイルからのリストア

対象読者

  • Enterprise Managerなどを使わずにSQL Serverの簡単な操作がしたい方。
  • .NETでWindowsアプリケーションを作ったことのある方、または作りたい方。

必要な環境

 C#または、VS.NETのプログラミングが行える環境で、SQL Server 2000のクライアントコンポーネントがインストールされていること。

プログラム実行時の注意事項

 .NET Framework 1.1でコーディングを行っています。実行する場合は、SQL Serverクライアントコンポーネントと.NET Framework 1.1以上がインストールされていることが必須条件です。

SQL Server一覧を取得する

 まずは、操作を行うSQL Serverを決定しないと行けません。そこで、ローカルネットワーク上に存在するサーバの一覧を取得してみます。

 サーバの一覧を取得するには、SQLDMO.ApplicationClassクラスを使用します。

SQLDMO.ApplicationClass applicationClass
  = new SQLDMO.ApplicationClass();

SQLDMO.NameList nameList;
nameList = applicationClass.ListAvailableSQLServers();

 ListAvailableSQLServersメソッドを実行すると、SQLDMO.NameListクラスのインスタンスが取得できます。

 取得したnameListインスタンスには、ネットワーク上に存在するサーバの一覧が格納されています。以下のようにすれば一覧を表示させることができます。

for(i = 1; i < nameList.Count; i++)
{
  Console.WriteLine("サーバー名称:{0}", nameList.Item(i));
}

データベース一覧を取得する

 作業対象となるSQL Serverが決定したら、次に操作を行うデータベースを選択します。まずは、サーバに構築されているデータベースの一覧を取得します。

 データベースの一覧を取得するには、ストアドプロシージャ「sp_databases」を実行します。実行結果の先頭カラム「DATABASE_NAME」からデータベース名称を取得することができます。

SqlConnection connection = null;

try
{
  connection = new SqlConnection();
  string connectionString 
    = "Persist Security Info=False;Server=(local);
       User ID=sa;Password=password;";
  connection.ConnectionString = connectionString;
  connection.Open();
  SqlCommand command = new SqlCommand();
  command.Connection = connection;
  command.CommandText = "sp_databases";
  SqlDataReader reader = command.ExecuteReader();
  this.databaseList.Items.Clear();
  while (reader.Read())
  {
    // 先頭カラムを取得します。
    string text = reader.GetString(0);
    Console.WriteLine("データベース名称:{0}", text);
  }
  reader.Close();
}
finally
{
  connection.Close();
}

  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

あなたにオススメ

All contents copyright © 2005-2022 Shoeisha Co., Ltd. All rights reserved. ver.1.5