c# 中使用 sqldmo

.Script((SQLDMO_SCRIPT_TYPE.SQLDMOScript_Drops,null,SQLDMO_SCRIPT_TYPE.SQLDMOScript_Drops);

SQL-DMO: Search and regenerate stored procedures in seconds

http://www.codeproject.com/KB/database/SQLDMO_And_C_.aspx?display=PrintAll

 

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

http://codezine.jp/article/detail/1532?p=2

はじめに

 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();
}

 

テーブル一覧を取得する

 次はデータベースに存在するテーブル一覧の取得です。

 対象のデータベースにアクセスするために、SQLDMO.SQLServerClassクラスからDatabases(SQLDMO.Databasesインターフェース)を取得します。DatabasesインターフェースのItemメソッド引数にデータベース名称をセットし、SQLDMO._Databaseインターフェースを取得します。

SQLDMO.Databases databases = sqlServerClass.Databases;
SQLDMO._Database database = databases.Item("データベース名称", null);

 インターフェースのTablesプロパティにセットされているSQLDMO.Tablesプロパティからテーブル一覧が取得できます。

 テーブル名称はSQLDMO.TableのNameプロパティにセットされています。また、SystemObjectプロパティからシステムオブジェクトであるかどうかを判定することができます。

foreach (SQLDMO.Table table in database.Tables)
{
  if (!table.SystemObject)
  {
    Console.WriteLine("テーブル名称:{0}", table.Name);
  }
}

ビュー一覧を取得する

 ビュー一覧の取得はテーブル一覧取得時と同様、SQLDMO._DatabaseインターフェースのViewsプロパティを利用して行います。

 取得したSQLDMO.ViewのNameプロパティからビュー名称を取得できます。またテーブルと同様、SystemObjectプロパティを利用してシステムオブジェクトであるかどうかを判定できます。

foreach (SQLDMO.View view in database.Views)
{
  if (!view.SystemObject)
  {
    Console.WriteLine("ビュー名称:{0}", view.Name);
  }
}

プロシージャ一覧を取得する

 プロシージャ一覧取得もテーブル・ビューと同様です。SQLDMO._DatabaseインターフェースのStoredProceduresプロパティからプロシージャ一覧が取得でき、SQLDMO.StoredProcedureのNameプロパティからプロシージャ名称を取得できます。そして、SystemObjectプロパティからシステムオブジェクトであるかどうかを判定することができます。

foreach (SQLDMO.StoredProcedure procedure 
           in database.StoredProcedures)
{
  if (!procedure.SystemObject)
  {
    Console.WriteLine("プロシージャ名称:{0}", procedure.Name);
  }
}

スクリプトの作成

 今度はスクリプトファイルを作成します。

 現在のデータベースからテーブル作成のスクリプトを実行するには、テーブル一覧取得時に利用したSQLDMO.Tableインスタンスを使います。

 スクリプトの作成はtableインスタンスのScriptメソッドを用いて行います。

SQLDMO.Table table;

SQLDMO_SCRIPT_TYPE sqldmo_script_type 
  = SQLDMO_SCRIPT_TYPE.SQLDMOScript_Default
  | SQLDMO_SCRIPT_TYPE.SQLDMOScript_Drops
  | SQLDMO_SCRIPT_TYPE.SQLDMOScript_DRIWithNoCheck
  | SQLDMO_SCRIPT_TYPE.SQLDMOScript_DRI_PrimaryKey
  | SQLDMO_SCRIPT_TYPE.SQLDMOScript_DRI_UniqueKeys
  | SQLDMO_SCRIPT_TYPE.SQLDMOScript_DRI_Defaults
  | SQLDMO_SCRIPT_TYPE.SQLDMOScript_DRI_ForeignKeys
  | SQLDMO_SCRIPT_TYPE.SQLDMOScript_DRI_Checks
  | SQLDMO_SCRIPT_TYPE.SQLDMOScript_NoDRI
  | SQLDMO_SCRIPT_TYPE.SQLDMOScript_OwnerQualify;

table.Script(sqldmo_script_type,
             "ファイル名称", 
             null,
             SQLDMO_SCRIPT2_TYPE.SQLDMOScript2_AnsiFile);

 Scriptメソッドの第1引数、第4引数にはオプション設定として、「SQLDMO_SCRIPT_TYPE」、または「SQLDMO_SCRIPT2_TYPE」を設定します。

 同様に、ビュー・プロシージャについても同じ方法でスクリプトファイルを生成できます。オプション設定により生成されるスクリプトファイルの内容を変更できます(drop文の追加や、ファイルフォーマットの指定などができます)。

SQLDMO.View view;

SQLDMO_SCRIPT_TYPE sqldmo_script_type 
  = SQLDMO_SCRIPT_TYPE.SQLDMOScript_Default
  | SQLDMO_SCRIPT_TYPE.SQLDMOScript_Drops
  | SQLDMO_SCRIPT_TYPE.SQLDMOScript_DRIWithNoCheck
  | SQLDMO_SCRIPT_TYPE.SQLDMOScript_DRI_PrimaryKey
  | SQLDMO_SCRIPT_TYPE.SQLDMOScript_DRI_UniqueKeys
  | SQLDMO_SCRIPT_TYPE.SQLDMOScript_DRI_Defaults
  | SQLDMO_SCRIPT_TYPE.SQLDMOScript_DRI_ForeignKeys
  | SQLDMO_SCRIPT_TYPE.SQLDMOScript_DRI_Checks
  | SQLDMO_SCRIPT_TYPE.SQLDMOScript_NoDRI
  | SQLDMO_SCRIPT_TYPE.SQLDMOScript_OwnerQualify;

view.Script(sqldmo_script_type, 
            "ファイル名称", 
            SQLDMO_SCRIPT2_TYPE.SQLDMOScript2_AnsiFile);

 ただし、テーブルの場合と引数の数が違う点に注意してください。

 

 

データベースのバックアップ

 データベースのバックアップは以下の手順で行うことができます。

  1. バックアップ作業を実行するために、SQLDMO.BackupClassクラスのインスタンスを生成します。
    SQLDMO.BackupClass backUp = new SQLDMO.BackupClass();
    
  2. バックアップ作業を行うサーバとの接続を確立するために、SQLDMO.SQLServerClassクラスのインスタンスを生成します。
    SQLDMO.SQLServerClass sqlServer = new SQLDMO.SQLServerClass();
    
  3. 作業対象となるSQL Serverに接続します。
    sqlServer.Connect( "サーバ名称", 
                       "ログインユーザー名称", 
                       "パスワード" );
    
  4. バックアップ作業を行いたいDBを指定する必要があります。また、バックアップの保存場所を指定します(今回はファイル形式で保存します)。
    // バックアップの対象DB
    backUp.Database = "データベース名称";
    // バックアップファイルの保存場所
    backUp.Files = "バックアップファイル名称";
    
  5. バックアップの種類を指定します(今回はデータベース全体をバックアップするので、SQLDMOBackup_Databaseを指定しています。差分バックアップや、ログなども可能です)。
    backUp.Action = SQLDMO.SQLDMO_BACKUP_TYPE.SQLDMOBackup_Database;
    
  6. SQLDMO.BackupClassクラスのSQLBackupメソッドを実行し、バックアップ作業を行います。
    // バックアップ操作を実行する
    backUp.SQLBackup( sqlServer );
    
  7. バックアップ作業が完了したら、データベースとのコネクションを開放し、終了です。
    sqlServer.DisConnect();
    

バックアップファイルからのリストア

 逆にデータベースをリストアする手順です。

  1. リストア作業を実行するために、SQLDMO.RestoreClassクラスのインスタンスを生成します。
    SQLDMO.RestoreClass restore = new SQLDMO.RestoreClass();
    
  2. リストア作業を行うサーバとの接続を確立するために、SQLDMO.SQLServerClassクラスのインスタンスを生成します。
    SQLDMO.SQLServerClass sqlServer = new SQLDMO.SQLServerClass();
    
  3. 作業対象となるSQL Serverに接続します。
    sqlServer.Connect( "サーバ名称", 
                       "ログインユーザー名称", 
                       "パスワード" );
    
  4. リストアの種類を指定します(今回はデータベースのリストアを選択しています。)
    restore.Action = SQLDMO.SQLDMO_RESTORE_TYPE.SQLDMORestore_Database;
    
  5. リストア作業対象のDBを指定します。
    restore.Database = "DB名称";
    
  6. 既にDBが存在する場合、バックアップファイルの内容と置き換えるかどうかを設定します。
    restore.ReplaceDatabase = true;
    
  7. リストアを行うバックアップファイルを指定します。
    restore.Files = @"C:/Data/BackUp/backup.bak";
    
  8. ファイル数を設定します。
    restore.FileNumber = 1;
    
  9. SQLDMO.BackupClassクラスのSQLRestoreメソッドを実行し、リストア作業を行います。
    restore.SQLRestore( sqlServer );
    
  10. リストア作業が完了したら、データベースとのコネクションを開放し、終了です。
    sqlServer.DisConnect();
    

まとめ

 以上のように、SQLDMOを利用することでSQL Serverを操作できます。今回は触れませんでしたが、Jobの取得などを行うこともできます。

 しかし、残念ながらSQLDMOはSQL Serverの将来バージョンで削除されることが決定しています(Books Onlineで明記されています)。SQL Server 2005の場合、SQL Server Management Objects(SMO)を利用した方がよさそうです。

 次回以降、機会があればSMOについても触れてみたいと思います。

======================

 

SampleForm.resx

<?xml version="1.0" encoding="utf-8"?>
<root>
  <!--
    Microsoft ResX Schema
   
    Version 1.3
   
    The primary goals of this format is to allow a simple XML format
    that is mostly human readable. The generation and parsing of the
    various data types are done through the TypeConverter classes
    associated with the data types.
   
    Example:
   
    ... ado.net/XML headers & schema ...
    <resheader name="resmimetype">text/microsoft-resx</resheader>
    <resheader name="version">1.3</resheader>
    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
    <data name="Name1">this is my long string</data>
    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
        [base64 mime encoded serialized .NET Framework object]
    </data>
    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
        [base64 mime encoded string representing a byte array form of the .NET Framework object]
    </data>
               
    There are any number of "resheader" rows that contain simple
    name/value pairs.
   
    Each data row contains a name, and value. The row also contains a
    type or mimetype. Type corresponds to a .NET class that support
    text/value conversion through the TypeConverter architecture.
    Classes that don't support this are serialized and stored with the
    mimetype set.
   
    The mimetype is used forserialized objects, and tells the
    ResXResourceReader how to depersist the object. This is currently not
    extensible. For a given mimetype the value must be set accordingly:
   
    Note - application/x-microsoft.net.object.binary.base64 is the format
    that the ResXResourceWriter will generate, however the reader can
    read any of the formats listed below.
   
    mimetype: application/x-microsoft.net.object.binary.base64
    value   : The object must be serialized with
            : System.Serialization.Formatters.Binary.BinaryFormatter
            : and then encoded with base64 encoding.
   
    mimetype: application/x-microsoft.net.object.soap.base64
    value   : The object must be serialized with
            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
            : and then encoded with base64 encoding.

    mimetype: application/x-microsoft.net.object.bytearray.base64
    value   : The object must be serialized into a byte array
            : using a System.ComponentModel.TypeConverter
            : and then encoded with base64 encoding.
    -->
  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
    <xsd:element name="root" msdata:IsDataSet="true">
      <xsd:complexType>
        <xsd:choice maxOccurs="unbounded">
          <xsd:element name="data">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
              </xsd:sequence>
              <xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
            </xsd:complexType>
          </xsd:element>
          <xsd:element name="resheader">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
              </xsd:sequence>
              <xsd:attribute name="name" type="xsd:string" use="required" />
            </xsd:complexType>
          </xsd:element>
        </xsd:choice>
      </xsd:complexType>
    </xsd:element>
  </xsd:schema>
  <resheader name="resmimetype">
    <value>text/microsoft-resx</value>
  </resheader>
  <resheader name="version">
    <value>1.3</value>
  </resheader>
  <resheader name="reader">
    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
  </resheader>
  <resheader name="writer">
    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
  </resheader>
  <data name="label1.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
    <value>False</value>
  </data>
  <data name="label1.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
    <value>Private</value>
  </data>
  <data name="label1.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
    <value>Private</value>
  </data>
  <data name="databaseListBox.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
    <value>Private</value>
  </data>
  <data name="databaseListBox.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
    <value>False</value>
  </data>
  <data name="databaseListBox.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
    <value>Private</value>
  </data>
  <data name="label2.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
    <value>False</value>
  </data>
  <data name="label2.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
    <value>Private</value>
  </data>
  <data name="label2.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
    <value>Private</value>
  </data>
  <data name="serverComboBox.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
    <value>Private</value>
  </data>
  <data name="serverComboBox.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
    <value>False</value>
  </data>
  <data name="serverComboBox.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
    <value>Private</value>
  </data>
  <data name="userTextBox.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
    <value>Private</value>
  </data>
  <data name="userTextBox.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
    <value>False</value>
  </data>
  <data name="userTextBox.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
    <value>Private</value>
  </data>
  <data name="label3.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
    <value>False</value>
  </data>
  <data name="label3.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
    <value>Private</value>
  </data>
  <data name="label3.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
    <value>Private</value>
  </data>
  <data name="label4.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
    <value>False</value>
  </data>
  <data name="label4.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
    <value>Private</value>
  </data>
  <data name="label4.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
    <value>Private</value>
  </data>
  <data name="passwordTextBox.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
    <value>Private</value>
  </data>
  <data name="passwordTextBox.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
    <value>False</value>
  </data>
  <data name="passwordTextBox.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
    <value>Private</value>
  </data>
  <data name="connectButton.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
    <value>False</value>
  </data>
  <data name="connectButton.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
    <value>Private</value>
  </data>
  <data name="connectButton.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
    <value>Private</value>
  </data>
  <data name="resultListBox.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
    <value>False</value>
  </data>
  <data name="resultListBox.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
    <value>Private</value>
  </data>
  <data name="resultListBox.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
    <value>Private</value>
  </data>
  <data name="tableRadioButton.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
    <value>False</value>
  </data>
  <data name="tableRadioButton.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
    <value>Private</value>
  </data>
  <data name="tableRadioButton.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
    <value>Private</value>
  </data>
  <data name="viewRadioButton.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
    <value>False</value>
  </data>
  <data name="viewRadioButton.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
    <value>Private</value>
  </data>
  <data name="viewRadioButton.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
    <value>Private</value>
  </data>
  <data name="storedProcedureRadioButton.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
    <value>False</value>
  </data>
  <data name="storedProcedureRadioButton.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
    <value>Private</value>
  </data>
  <data name="storedProcedureRadioButton.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
    <value>Private</value>
  </data>
  <data name="searchButton.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
    <value>False</value>
  </data>
  <data name="searchButton.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
    <value>Private</value>
  </data>
  <data name="searchButton.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
    <value>Private</value>
  </data>
  <data name="outputButton.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
    <value>False</value>
  </data>
  <data name="outputButton.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
    <value>Private</value>
  </data>
  <data name="outputButton.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
    <value>Private</value>
  </data>
  <data name="RestoreButton.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
    <value>False</value>
  </data>
  <data name="RestoreButton.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
    <value>Private</value>
  </data>
  <data name="RestoreButton.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
    <value>Private</value>
  </data>
  <data name="BackUpButton.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
    <value>False</value>
  </data>
  <data name="BackUpButton.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
    <value>Private</value>
  </data>
  <data name="BackUpButton.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
    <value>Private</value>
  </data>
  <data name="tabControl1.SnapToGrid" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
    <value>True</value>
  </data>
  <data name="tabControl1.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
    <value>False</value>
  </data>
  <data name="tabControl1.DrawGrid" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
    <value>True</value>
  </data>
  <data name="tabControl1.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
    <value>Private</value>
  </data>
  <data name="tabControl1.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
    <value>Private</value>
  </data>
  <data name="tabControl1.GridSize" type="System.Drawing.Size, System.Drawing, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
    <value>8, 8</value>
  </data>
  <data name="tabPage1.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
    <value>False</value>
  </data>
  <data name="tabPage1.SnapToGrid" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
    <value>True</value>
  </data>
  <data name="tabPage1.DrawGrid" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
    <value>True</value>
  </data>
  <data name="tabPage1.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
    <value>Private</value>
  </data>
  <data name="tabPage1.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
    <value>Private</value>
  </data>
  <data name="tabPage1.GridSize" type="System.Drawing.Size, System.Drawing, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
    <value>8, 8</value>
  </data>
  <data name="tabPage2.SnapToGrid" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
    <value>True</value>
  </data>
  <data name="tabPage2.DrawGrid" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
    <value>True</value>
  </data>
  <data name="tabPage2.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
    <value>Private</value>
  </data>
  <data name="tabPage2.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
    <value>Private</value>
  </data>
  <data name="tabPage2.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
    <value>False</value>
  </data>
  <data name="tabPage2.GridSize" type="System.Drawing.Size, System.Drawing, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
    <value>8, 8</value>
  </data>
  <data name="statusBar2.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
    <value>False</value>
  </data>
  <data name="statusBar2.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
    <value>Private</value>
  </data>
  <data name="statusBar2.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
    <value>Private</value>
  </data>
  <data name="tabPage3.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
    <value>False</value>
  </data>
  <data name="tabPage3.SnapToGrid" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
    <value>True</value>
  </data>
  <data name="tabPage3.DrawGrid" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
    <value>True</value>
  </data>
  <data name="tabPage3.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
    <value>Private</value>
  </data>
  <data name="tabPage3.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
    <value>Private</value>
  </data>
  <data name="tabPage3.GridSize" type="System.Drawing.Size, System.Drawing, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
    <value>8, 8</value>
  </data>
  <data name="statusBar3.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
    <value>False</value>
  </data>
  <data name="statusBar3.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
    <value>Private</value>
  </data>
  <data name="statusBar3.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
    <value>Private</value>
  </data>
  <data name="folderBrowserDialog1.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
    <value>Private</value>
  </data>
  <data name="folderBrowserDialog1.Location" type="System.Drawing.Point, System.Drawing, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
    <value>17, 17</value>
  </data>
  <data name="folderBrowserDialog1.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
    <value>Private</value>
  </data>
  <data name="saveFileDialog1.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
    <value>Private</value>
  </data>
  <data name="saveFileDialog1.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
    <value>Private</value>
  </data>
  <data name="saveFileDialog1.Location" type="System.Drawing.Point, System.Drawing, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
    <value>178, 17</value>
  </data>
  <data name="openFileDialog1.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
    <value>Private</value>
  </data>
  <data name="openFileDialog1.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
    <value>Private</value>
  </data>
  <data name="openFileDialog1.Location" type="System.Drawing.Point, System.Drawing, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
    <value>309, 17</value>
  </data>
  <data name="$this.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
    <value>False</value>
  </data>
  <data name="$this.Language" type="System.Globalization.CultureInfo, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
    <value>(Default)</value>
  </data>
  <data name="$this.TrayLargeIcon" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
    <value>False</value>
  </data>
  <data name="$this.Localizable" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
    <value>False</value>
  </data>
  <data name="$this.GridSize" type="System.Drawing.Size, System.Drawing, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
    <value>8, 8</value>
  </data>
  <data name="$this.DrawGrid" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
    <value>True</value>
  </data>
  <data name="$this.Name">
    <value>SampleForm</value>
  </data>
  <data name="$this.TrayHeight" type="System.Int32, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
    <value>80</value>
  </data>
  <data name="$this.SnapToGrid" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
    <value>True</value>
  </data>
  <data name="$this.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
    <value>Private</value>
  </data>
</root>

=====================

SampleForm.cs

using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;

using SQLDMO;
using SQLDMOSample.Items;
using System.Data.SqlClient;

namespace SQLDMOSample
{
 /// <summary>
 /// SampleForm 偺奣梫偺愢柧偱偡丅
 /// </summary>
 public class SampleForm : System.Windows.Forms.Form
 {
  private System.Windows.Forms.Label label1;
  private System.Windows.Forms.ListBox databaseListBox;
  private System.Windows.Forms.Label label2;
  private System.Windows.Forms.ComboBox serverComboBox;
  private System.Windows.Forms.TextBox userTextBox;
  private System.Windows.Forms.Label label3;
  private System.Windows.Forms.Label label4;
  private System.Windows.Forms.TextBox passwordTextBox;
  private System.Windows.Forms.Button connectButton;
  private System.Windows.Forms.ListBox resultListBox;
  private System.Windows.Forms.RadioButton tableRadioButton;
  private System.Windows.Forms.RadioButton viewRadioButton;
  private System.Windows.Forms.Button searchButton;
  private System.Windows.Forms.RadioButton storedProcedureRadioButton;
  private System.Windows.Forms.Button outputButton;
  /// <summary>
  /// 昁梫側僨僓僀僫曄悢偱偡丅
  /// </summary>
  private System.ComponentModel.Container components = null;
  private System.Windows.Forms.Button RestoreButton;
  private System.Windows.Forms.Button BackUpButton;
  private System.Windows.Forms.TabControl tabControl1;
  private System.Windows.Forms.TabPage tabPage1;
  private System.Windows.Forms.TabPage tabPage2;
  private System.Windows.Forms.TabPage tabPage3;
  private System.Windows.Forms.StatusBar statusBar2;
  private System.Windows.Forms.StatusBar statusBar3;
  private System.Windows.Forms.FolderBrowserDialog folderBrowserDialog1;
  private System.Windows.Forms.SaveFileDialog saveFileDialog1;
  private System.Windows.Forms.OpenFileDialog openFileDialog1;

  private SQLServerClass sqlServerClass = null;

  public SampleForm()
  {
   InitializeComponent();
  }

  /// <summary>
  /// 巊梡偝傟偰偄傞儕僜乕僗偵屻張棟傪幚峴偟傑偡丅
  /// </summary>
  protected override void Dispose( bool disposing )
  {
   if( disposing )
   {
    if (components != null)
    {
     components.Dispose();
    }
   }
   base.Dispose( disposing );
  }

  #region Windows 僼僅乕儉 僨僓僀僫偱惗惉偝傟偨僐乕僪
  /// <summary>
  /// 僨僓僀僫 僒億乕僩偵昁梫側儊僜僢僪偱偡丅偙偺儊僜僢僪偺撪梕傪
  /// 僐乕僪 僄僨傿僞偱曄峏偟側偄偱偔偩偝偄丅
  /// </summary>
  private void InitializeComponent()
  {
   this.label1 = new System.Windows.Forms.Label();
   this.databaseListBox = new System.Windows.Forms.ListBox();
   this.label2 = new System.Windows.Forms.Label();
   this.serverComboBox = new System.Windows.Forms.ComboBox();
   this.userTextBox = new System.Windows.Forms.TextBox();
   this.label3 = new System.Windows.Forms.Label();
   this.label4 = new System.Windows.Forms.Label();
   this.passwordTextBox = new System.Windows.Forms.TextBox();
   this.connectButton = new System.Windows.Forms.Button();
   this.resultListBox = new System.Windows.Forms.ListBox();
   this.tableRadioButton = new System.Windows.Forms.RadioButton();
   this.viewRadioButton = new System.Windows.Forms.RadioButton();
   this.storedProcedureRadioButton = new System.Windows.Forms.RadioButton();
   this.searchButton = new System.Windows.Forms.Button();
   this.outputButton = new System.Windows.Forms.Button();
   this.RestoreButton = new System.Windows.Forms.Button();
   this.BackUpButton = new System.Windows.Forms.Button();
   this.tabControl1 = new System.Windows.Forms.TabControl();
   this.tabPage1 = new System.Windows.Forms.TabPage();
   this.tabPage2 = new System.Windows.Forms.TabPage();
   this.statusBar2 = new System.Windows.Forms.StatusBar();
   this.tabPage3 = new System.Windows.Forms.TabPage();
   this.statusBar3 = new System.Windows.Forms.StatusBar();
   this.folderBrowserDialog1 = new System.Windows.Forms.FolderBrowserDialog();
   this.saveFileDialog1 = new System.Windows.Forms.SaveFileDialog();
   this.openFileDialog1 = new System.Windows.Forms.OpenFileDialog();
   this.tabControl1.SuspendLayout();
   this.tabPage1.SuspendLayout();
   this.tabPage2.SuspendLayout();
   this.tabPage3.SuspendLayout();
   this.SuspendLayout();
   //
   // label1
   //
   this.label1.Location = new System.Drawing.Point(8, 16);
   this.label1.Name = "label1";
   this.label1.Size = new System.Drawing.Size(80, 16);
   this.label1.TabIndex = 0;
   this.label1.Text = "僒乕僶乕";
   this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
   //
   // databaseListBox
   //
   this.databaseListBox.ItemHeight = 12;
   this.databaseListBox.Location = new System.Drawing.Point(240, 40);
   this.databaseListBox.Name = "databaseListBox";
   this.databaseListBox.Size = new System.Drawing.Size(208, 172);
   this.databaseListBox.TabIndex = 4;
   //
   // label2
   //
   this.label2.Location = new System.Drawing.Point(240, 16);
   this.label2.Name = "label2";
   this.label2.Size = new System.Drawing.Size(80, 16);
   this.label2.TabIndex = 0;
   this.label2.Text = "僨乕僞儀乕僗";
   this.label2.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
   //
   // serverComboBox
   //
   this.serverComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
   this.serverComboBox.Location = new System.Drawing.Point(8, 40);
   this.serverComboBox.Name = "serverComboBox";
   this.serverComboBox.Size = new System.Drawing.Size(184, 20);
   this.serverComboBox.TabIndex = 0;
   //
   // userTextBox
   //
   this.userTextBox.Location = new System.Drawing.Point(8, 96);
   this.userTextBox.Name = "userTextBox";
   this.userTextBox.Size = new System.Drawing.Size(176, 19);
   this.userTextBox.TabIndex = 1;
   this.userTextBox.Text = "";
   //
   // label3
   //
   this.label3.Location = new System.Drawing.Point(8, 80);
   this.label3.Name = "label3";
   this.label3.Size = new System.Drawing.Size(80, 16);
   this.label3.TabIndex = 4;
   this.label3.Text = "儐乕僓乕";
   this.label3.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
   //
   // label4
   //
   this.label4.Location = new System.Drawing.Point(8, 128);
   this.label4.Name = "label4";
   this.label4.Size = new System.Drawing.Size(80, 16);
   this.label4.TabIndex = 5;
   this.label4.Text = "僷僗儚乕僪";
   this.label4.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
   //
   // passwordTextBox
   //
   this.passwordTextBox.Location = new System.Drawing.Point(8, 144);
   this.passwordTextBox.Name = "passwordTextBox";
   this.passwordTextBox.PasswordChar = '*';
   this.passwordTextBox.Size = new System.Drawing.Size(176, 19);
   this.passwordTextBox.TabIndex = 2;
   this.passwordTextBox.Text = "";
   //
   // connectButton
   //
   this.connectButton.Location = new System.Drawing.Point(80, 184);
   this.connectButton.Name = "connectButton";
   this.connectButton.Size = new System.Drawing.Size(112, 32);
   this.connectButton.TabIndex = 3;
   this.connectButton.Text = "愙懕";
   this.connectButton.Click += new System.EventHandler(this.connectButton_Click);
   //
   // resultListBox
   //
   this.resultListBox.ItemHeight = 12;
   this.resultListBox.Location = new System.Drawing.Point(224, 16);
   this.resultListBox.Name = "resultListBox";
   this.resultListBox.Size = new System.Drawing.Size(208, 148);
   this.resultListBox.TabIndex = 3;
   //
   // tableRadioButton
   //
   this.tableRadioButton.Checked = true;
   this.tableRadioButton.Location = new System.Drawing.Point(16, 16);
   this.tableRadioButton.Name = "tableRadioButton";
   this.tableRadioButton.Size = new System.Drawing.Size(160, 32);
   this.tableRadioButton.TabIndex = 0;
   this.tableRadioButton.TabStop = true;
   this.tableRadioButton.Text = "僥乕僽儖";
   //
   // viewRadioButton
   //
   this.viewRadioButton.Location = new System.Drawing.Point(16, 52);
   this.viewRadioButton.Name = "viewRadioButton";
   this.viewRadioButton.Size = new System.Drawing.Size(160, 32);
   this.viewRadioButton.TabIndex = 1;
   this.viewRadioButton.Text = "價儏乕";
   //
   // storedProcedureRadioButton
   //
   this.storedProcedureRadioButton.Location = new System.Drawing.Point(16, 88);
   this.storedProcedureRadioButton.Name = "storedProcedureRadioButton";
   this.storedProcedureRadioButton.Size = new System.Drawing.Size(160, 32);
   this.storedProcedureRadioButton.TabIndex = 2;
   this.storedProcedureRadioButton.Text = "僾儘僔乕僕儍";
   //
   // searchButton
   //
   this.searchButton.Location = new System.Drawing.Point(192, 176);
   this.searchButton.Name = "searchButton";
   this.searchButton.Size = new System.Drawing.Size(112, 32);
   this.searchButton.TabIndex = 4;
   this.searchButton.Text = "専嶕";
   this.searchButton.Click += new System.EventHandler(this.searchButton_Click);
   //
   // outputButton
   //
   this.outputButton.Location = new System.Drawing.Point(320, 176);
   this.outputButton.Name = "outputButton";
   this.outputButton.Size = new System.Drawing.Size(112, 32);
   this.outputButton.TabIndex = 5;
   this.outputButton.Text = "弌椡";
   this.outputButton.Click += new System.EventHandler(this.outputButton_Click);
   //
   // RestoreButton
   //
   this.RestoreButton.Location = new System.Drawing.Point(284, 56);
   this.RestoreButton.Name = "RestoreButton";
   this.RestoreButton.Size = new System.Drawing.Size(112, 32);
   this.RestoreButton.TabIndex = 11;
   this.RestoreButton.Text = "儕僗僩傾";
   this.RestoreButton.Click += new System.EventHandler(this.RestoreButton_Click);
   //
   // BackUpButton
   //
   this.BackUpButton.Location = new System.Drawing.Point(76, 56);
   this.BackUpButton.Name = "BackUpButton";
   this.BackUpButton.Size = new System.Drawing.Size(112, 32);
   this.BackUpButton.TabIndex = 10;
   this.BackUpButton.Text = "僶僢僋傾僢僾";
   this.BackUpButton.Click += new System.EventHandler(this.BackUpButton_Click);
   //
   // tabControl1
   //
   this.tabControl1.Controls.Add(this.tabPage1);
   this.tabControl1.Controls.Add(this.tabPage2);
   this.tabControl1.Controls.Add(this.tabPage3);
   this.tabControl1.Dock = System.Windows.Forms.DockStyle.Fill;
   this.tabControl1.Location = new System.Drawing.Point(0, 0);
   this.tabControl1.Name = "tabControl1";
   this.tabControl1.SelectedIndex = 0;
   this.tabControl1.Size = new System.Drawing.Size(480, 278);
   this.tabControl1.TabIndex = 12;
   this.tabControl1.SelectedIndexChanged += new System.EventHandler(this.tabControl1_SelectedIndexChanged);
   //
   // tabPage1
   //
   this.tabPage1.Controls.Add(this.label4);
   this.tabPage1.Controls.Add(this.label3);
   this.tabPage1.Controls.Add(this.userTextBox);
   this.tabPage1.Controls.Add(this.serverComboBox);
   this.tabPage1.Controls.Add(this.label2);
   this.tabPage1.Controls.Add(this.databaseListBox);
   this.tabPage1.Controls.Add(this.label1);
   this.tabPage1.Controls.Add(this.connectButton);
   this.tabPage1.Controls.Add(this.passwordTextBox);
   this.tabPage1.Location = new System.Drawing.Point(4, 21);
   this.tabPage1.Name = "tabPage1";
   this.tabPage1.Size = new System.Drawing.Size(472, 253);
   this.tabPage1.TabIndex = 0;
   this.tabPage1.Text = "DB慖戰";
   //
   // tabPage2
   //
   this.tabPage2.Controls.Add(this.outputButton);
   this.tabPage2.Controls.Add(this.searchButton);
   this.tabPage2.Controls.Add(this.storedProcedureRadioButton);
   this.tabPage2.Controls.Add(this.viewRadioButton);
   this.tabPage2.Controls.Add(this.tableRadioButton);
   this.tabPage2.Controls.Add(this.resultListBox);
   this.tabPage2.Controls.Add(this.statusBar2);
   this.tabPage2.Location = new System.Drawing.Point(4, 21);
   this.tabPage2.Name = "tabPage2";
   this.tabPage2.Size = new System.Drawing.Size(472, 253);
   this.tabPage2.TabIndex = 1;
   this.tabPage2.Text = "専嶕丒弌椡";
   //
   // statusBar2
   //
   this.statusBar2.Location = new System.Drawing.Point(0, 229);
   this.statusBar2.Name = "statusBar2";
   this.statusBar2.Size = new System.Drawing.Size(472, 24);
   this.statusBar2.TabIndex = 13;
   this.statusBar2.Text = "statusBar2";
   //
   // tabPage3
   //
   this.tabPage3.Controls.Add(this.statusBar3);
   this.tabPage3.Controls.Add(this.BackUpButton);
   this.tabPage3.Controls.Add(this.RestoreButton);
   this.tabPage3.Location = new System.Drawing.Point(4, 21);
   this.tabPage3.Name = "tabPage3";
   this.tabPage3.Size = new System.Drawing.Size(472, 253);
   this.tabPage3.TabIndex = 2;
   this.tabPage3.Text = "僶僢僋傾僢僾丒儕僗僩傾";
   //
   // statusBar3
   //
   this.statusBar3.Location = new System.Drawing.Point(0, 231);
   this.statusBar3.Name = "statusBar3";
   this.statusBar3.Size = new System.Drawing.Size(472, 22);
   this.statusBar3.TabIndex = 12;
   this.statusBar3.Text = "statusBar3";
   //
   // saveFileDialog1
   //
   this.saveFileDialog1.FileOk += new System.ComponentModel.CancelEventHandler(this.saveFileDialog1_FileOk);
   //
   // openFileDialog1
   //
   this.openFileDialog1.FileOk += new System.ComponentModel.CancelEventHandler(this.openFileDialog1_FileOk);
   //
   // SampleForm
   //
   this.AutoScaleBaseSize = new System.Drawing.Size(5, 12);
   this.ClientSize = new System.Drawing.Size(480, 278);
   this.Controls.Add(this.tabControl1);
   this.MaximizeBox = false;
   this.Name = "SampleForm";
   this.Text = "SQLDMO僒儞僾儖";
   this.Load += new System.EventHandler(this.SampleForm_Load);
   this.Closed += new System.EventHandler(this.SampleForm_Closed);
   this.tabControl1.ResumeLayout(false);
   this.tabPage1.ResumeLayout(false);
   this.tabPage2.ResumeLayout(false);
   this.tabPage3.ResumeLayout(false);
   this.ResumeLayout(false);

  }
  #endregion

  /// <summary>
  /// 傾僾儕働乕僔儑儞偺儊僀儞 僄儞僩儕 億僀儞僩偱偡丅
  /// </summary>
  [STAThread]
  static void Main()
  {
   System.Windows.Forms.Application.Run(new SampleForm());
  }

  private void SampleForm_Load(object sender, System.EventArgs e)
  {
   NameList nameList;
   ApplicationClass applicationClass = new ApplicationClass();
   nameList = applicationClass.ListAvailableSQLServers();
   
   for ( int i = 1; i < nameList.Count; i++ )
   {
    this.serverComboBox.Items.Add( nameList.Item( i ) );
   }
  }

  private void SampleForm_Closed(object sender, System.EventArgs e)
  {
   try
   {
    if ( sqlServerClass != null )
     this.sqlServerClass.DisConnect();
   }
   catch(Exception ex)
   {
    System.Diagnostics.Debug.WriteLine( ex.Message, "僄儔乕" );
   }
  }

  private void connectButton_Click(object sender, System.EventArgs e)
  {
   string connectionString
    = string.Format( "Persist Security Info=False;Server={0};User ID={1};Password={2};",
         this.serverComboBox.SelectedItem,
         this.userTextBox.Text,
         this.passwordTextBox.Text );
   try
   {
    SqlConnection connection = null;
    try
    {
     connection = new SqlConnection();
     connection.ConnectionString = connectionString;
     connection.Open();
     SqlCommand command = new SqlCommand();
     command.Connection = connection;
     command.CommandText = "sp_databases";
     SqlDataReader reader = command.ExecuteReader();
     this.databaseListBox.Items.Clear();

     while ( reader.Read() )
     {
      string text = reader.GetString(0);
      this.databaseListBox.Items.Add(text);
     }
     reader.Close();
    }
    finally
    {
     connection.Close();
    }
    this.databaseListBox.Focus();
   }
   catch (Exception exception)
   {
    MessageBox.Show(exception.Message);
   }
  }

  private void searchButton_Click(object sender, System.EventArgs e)
  {
   try
   {
    if ( !this.targetCheck() )
     return;
   
    this.resultListBox.Items.Clear();
    string targetDatabase = this.databaseListBox.SelectedItem.ToString();

    if ( this.tableRadioButton.Checked )
     this.searchTables( targetDatabase );
    else if ( this.viewRadioButton.Checked )
     this.searchViews( targetDatabase );
    else
     this.searchStoredProcedures( targetDatabase );

    this.statusBar2.Text = "専嶕偑姰椆偟傑偟偨丅";
   }
   catch(Exception ex)
   {
    this.statusBar2.Text = ex.Message;
   }
  }

  /// <summary>
  /// 僥乕僽儖傪専嶕偡傞
  /// </summary>
  private void searchTables(string targetDatabase)
  {
   try
   {
    if ( sqlServerClass == null )
    {
     sqlServerClass = new SQLServerClass();
     sqlServerClass.Connect( this.serverComboBox.SelectedItem,
      this.userTextBox.Text,
      this.passwordTextBox.Text );
    }

    Databases databases = sqlServerClass.Databases;
    _Database database = databases.Item( this.databaseListBox.SelectedItem.ToString(), null );

    foreach ( SQLDMO.Table table in database.Tables )
    {
     if ( !table.SystemObject )
     {
      this.resultListBox.Items.Add( new TableItem(table) );
     }
    }
   }
   catch (Exception exception)
   {
    System.Diagnostics.Debug.WriteLine( exception.Message, "僄儔乕" );
    return;
   }
  }

  private void searchViews(string targetDatabase)
  {
   try
   {
    if ( sqlServerClass == null )
    {
     sqlServerClass = new SQLServerClass();
     sqlServerClass.Connect( this.serverComboBox.SelectedItem,
      this.userTextBox.Text,
      this.passwordTextBox.Text );
    }
     
    Databases databases = sqlServerClass.Databases;
    _Database database = databases.Item( this.databaseListBox.SelectedItem.ToString(), null );

    foreach ( SQLDMO.View view in database.Views )
    {
     if ( !view.SystemObject )
     {
      this.resultListBox.Items.Add( new ViewItem(view) );
     }
    }
   }
   catch (Exception exception)
   {
    System.Diagnostics.Debug.WriteLine( exception.Message, "僄儔乕" );
    return;
   }
  }

  private void searchStoredProcedures(string targetDatabase)
  {
   try
   {
    if ( sqlServerClass == null )
    {
     sqlServerClass = new SQLServerClass();
     sqlServerClass.Connect( this.serverComboBox.SelectedItem,
      this.userTextBox.Text,
      this.passwordTextBox.Text );
    }

    Databases databases = sqlServerClass.Databases;
    _Database database = databases.Item( this.databaseListBox.SelectedItem.ToString(), null );

    foreach ( SQLDMO.StoredProcedure storedProcedure in database.StoredProcedures )
    {
     if ( !storedProcedure.SystemObject )
     {
      this.resultListBox.Items.Add( new StoredProcedureItem(storedProcedure) );
     }
    }
   }
   catch (Exception exception)
   {
    System.Diagnostics.Debug.WriteLine( exception.Message, "僄儔乕" );
    return;
   }
  }

  private void outputButton_Click(object sender, System.EventArgs e)
  {
   
   if ( this.folderBrowserDialog1.ShowDialog() == DialogResult.OK )
   {
    string selectedPath = this.folderBrowserDialog1.SelectedPath;
    try
    {
     if ( !this.targetCheck() )
      return;

     foreach ( IObjectItem item in this.resultListBox.SelectedItems )
     {
      item.CreateScript( selectedPath );
     }

     this.statusBar2.Text = "弌椡偑姰椆偟傑偟偨丅";
    }
    catch(Exception ex)
    {
     this.statusBar2.Text = ex.Message;
    }
   }
  }

  private void BackUpButton_Click(object sender, System.EventArgs e)
  {
   this.saveFileDialog1.Filter = "僶僢僋傾僢僾僼傽僀儖 (*.bak)|*.bak";
   this.saveFileDialog1.ShowDialog();
  }

  private void backUp(string fileName)
  {
   // 僨乕僞儀乕僗偺僶僢僋傾僢僾傪峴偆丅
   SQLDMO.SQLServerClass sqlServer = new SQLDMO.SQLServerClass();
   SQLDMO.BackupClass backUp = new SQLDMO.BackupClass();

   try
   {
    // 僔僗僥儉偲偺愙懕傪妋棫偡傞丅
    sqlServer.Connect( this.serverComboBox.SelectedItem,
     this.userTextBox.Text,
     this.passwordTextBox.Text );
    // 僶僢僋傾僢僾偺懳徾DB
    backUp.Database = "Developer";

    // 僶僢僋傾僢僾僼傽僀儖偺曐懚応強
//    backUp.Files = @"C:/Data/BackUp/backup.bak";
    backUp.Files = fileName;

    // 僨乕僞儀乕僗慡懱傪僶僢僋傾僢僾偡傞
    backUp.Action = SQLDMO.SQLDMO_BACKUP_TYPE.SQLDMOBackup_Database;

    // 僶僢僋傾僢僾憖嶌傪幚峴偡傞
    backUp.SQLBackup( sqlServer );

    this.statusBar3.Text = "僶僢僋傾僢僾偑姰椆偟傑偟偨丅";
   }
   catch(Exception ex)
   {
    Console.WriteLine( ex.Message );
    this.statusBar3.Text = "僶僢僋傾僢僾偵幐攕偟傑偟偨丅";
   }
   finally
   {
    sqlServer.DisConnect();
   }
  }

  private void RestoreButton_Click(object sender, System.EventArgs e)
  {
   this.openFileDialog1.Filter = "僶僢僋傾僢僾僼傽僀儖 (*.bak)|*.bak";
   this.openFileDialog1.ShowDialog();
  }

  private void restore(string fileName)
  {
   // 僨乕僞儀乕僗偺儕僗僩傾傪峴偆丅
   SQLDMO.SQLServerClass sqlServer = new SQLDMO.SQLServerClass();
   SQLDMO.RestoreClass restore = new SQLDMO.RestoreClass();

   try
   {
    sqlServer.Connect( this.serverComboBox.SelectedItem,
     this.userTextBox.Text,
     this.passwordTextBox.Text );

    restore.Action = SQLDMO.SQLDMO_RESTORE_TYPE.SQLDMORestore_Database;

    // 儕僗僩傾偺懳徾DB
    restore.Database = "Developer";
    restore.ReplaceDatabase = true;

    // 儕僗僩傾偡傞僼傽僀儖偺僷僗
//    restore.Files = @"C:/Data/BackUp/backup.bak";
    restore.Files = fileName;
    restore.FileNumber = 1;
    restore.SQLRestore( sqlServer );

    this.statusBar3.Text = "儕僗僩傾偑姰椆偟傑偟偨丅";
   }
   catch(Exception ex)
   {
    Console.WriteLine( ex.Message );
    this.statusBar3.Text = "儕僗僩傾偵幐攕偟傑偟偨丅";
   }
   finally
   {
    sqlServer.DisConnect();
   }
  }

  private bool targetCheck()
  {
   if ( this.serverComboBox.SelectedIndex < 0
    || this.userTextBox.Text.Length == 0
    || this.passwordTextBox.Text.Length == 0 )
   {
    this.tabControl1.SelectedIndex = 0;
    MessageBox.Show( "愙懕偡傞僒乕僶傪愝掕偟偰偔偩偝偄丅" );
    return false;
   }

   if ( this.databaseListBox.SelectedIndex < 0 )
   {
    this.tabControl1.SelectedIndex = 0;
    MessageBox.Show( "愙懕偡傞DB傪愝掕偟偰偔偩偝偄丅" );
    return false;
   }
   return true;
  }

  private void tabControl1_SelectedIndexChanged(object sender, System.EventArgs e)
  {
   this.statusBar2.Text = string.Empty;
   this.statusBar3.Text = string.Empty;
  }

  private void saveFileDialog1_FileOk(object sender, System.ComponentModel.CancelEventArgs e)
  {
   this.backUp( saveFileDialog1.FileName );
  }

  private void openFileDialog1_FileOk(object sender, System.ComponentModel.CancelEventArgs e)
  {
   this.restore( openFileDialog1.FileName );
  }
 }
}
================

ViewItem.cs

using System;
using System.IO;
using SQLDMO;

namespace SQLDMOSample.Items
{
 /// <summary>
 /// ViewItem 偺奣梫偺愢柧偱偡丅
 /// </summary>
 public class ViewItem : IObjectItem
 {
  private View _view;

  public ViewItem(View view)
  {
   this._view = view;
  }

  /// <summary>
  /// View偺柤徧傪庢摼偟傑偡丅
  /// </summary>
  /// <returns></returns>
  public override string ToString()
  {
   return this._view.Name;
  }

  public void CreateScript(string directoryPath)
  {
   SQLDMO_SCRIPT_TYPE sqldmo_script_type
    = SQLDMO_SCRIPT_TYPE.SQLDMOScript_Default
    | SQLDMO_SCRIPT_TYPE.SQLDMOScript_Drops
    | SQLDMO_SCRIPT_TYPE.SQLDMOScript_DRIWithNoCheck
    | SQLDMO_SCRIPT_TYPE.SQLDMOScript_DRI_PrimaryKey
    | SQLDMO_SCRIPT_TYPE.SQLDMOScript_DRI_UniqueKeys
    | SQLDMO_SCRIPT_TYPE.SQLDMOScript_DRI_Defaults
    | SQLDMO_SCRIPT_TYPE.SQLDMOScript_DRI_ForeignKeys
    | SQLDMO_SCRIPT_TYPE.SQLDMOScript_DRI_Checks
    | SQLDMO_SCRIPT_TYPE.SQLDMOScript_NoDRI
    | SQLDMO_SCRIPT_TYPE.SQLDMOScript_OwnerQualify;


   string filePath = Path.Combine( directoryPath, string.Format( "{0}.sql", this._view.Name ) );

   this._view.Script( sqldmo_script_type,
    filePath,
    SQLDMO_SCRIPT2_TYPE.SQLDMOScript2_AnsiFile );
  }
 }
}
==================================

TableItem.cs

using System;
using SQLDMO;
using System.IO;

namespace SQLDMOSample.Items
{
 /// <summary>
 /// TableItem 偺奣梫偺愢柧偱偡丅
 /// </summary>
 public class TableItem : IObjectItem
 {
  private Table _table;
  public TableItem(Table table)
  {
   this._table = table;
  }

  /// <summary>
  /// Table偺柤徧傪庢摼偟傑偡丅
  /// </summary>
  /// <returns></returns>
  public override string ToString()
  {
   return this._table.Name;
  }

  public void CreateScript(string directoryPath)
  {
   SQLDMO_SCRIPT_TYPE sqldmo_script_type
    = SQLDMO_SCRIPT_TYPE.SQLDMOScript_Default
    | SQLDMO_SCRIPT_TYPE.SQLDMOScript_Drops
    | SQLDMO_SCRIPT_TYPE.SQLDMOScript_DRIWithNoCheck
    | SQLDMO_SCRIPT_TYPE.SQLDMOScript_DRI_PrimaryKey
    | SQLDMO_SCRIPT_TYPE.SQLDMOScript_DRI_UniqueKeys
    | SQLDMO_SCRIPT_TYPE.SQLDMOScript_DRI_Defaults
    | SQLDMO_SCRIPT_TYPE.SQLDMOScript_DRI_ForeignKeys
    | SQLDMO_SCRIPT_TYPE.SQLDMOScript_DRI_Checks
    | SQLDMO_SCRIPT_TYPE.SQLDMOScript_NoDRI
    | SQLDMO_SCRIPT_TYPE.SQLDMOScript_OwnerQualify;

   string filePath = Path.Combine( directoryPath, string.Format( "{0}.sql", this._table.Name ) );
   this._table.Script( sqldmo_script_type,
    filePath,
    null,
    SQLDMO_SCRIPT2_TYPE.SQLDMOScript2_AnsiFile );

  }
 }
}
===================

StoredProcedureItem.cs

using System;
using SQLDMO;
using System.IO;

namespace SQLDMOSample.Items
{
 /// <summary>
 /// StoredProcedureItem 偺奣梫偺愢柧偱偡丅
 /// </summary>
 public class StoredProcedureItem : IObjectItem
 {
  private StoredProcedure _storedProcedure;
  public StoredProcedureItem(StoredProcedure storedProcedure)
  {
   this._storedProcedure = storedProcedure;
  }

  /// <summary>
  /// StoredProcedure偺柤徧傪庢摼偟傑偡丅
  /// </summary>
  /// <returns></returns>
  public override string ToString()
  {
   return this._storedProcedure.Name;
  }

  public void CreateScript(string directoryPath)
  {
   SQLDMO_SCRIPT_TYPE storedProcedureScriptType
    = SQLDMO_SCRIPT_TYPE.SQLDMOScript_OwnerQualify
    | SQLDMO_SCRIPT_TYPE.SQLDMOScript_Default
    | SQLDMO_SCRIPT_TYPE.SQLDMOScript_Drops;

   string filePath = Path.Combine( directoryPath, string.Format( "{0}.sql", this._storedProcedure.Name ) );

   this._storedProcedure.Script( storedProcedureScriptType,
            filePath,
            SQLDMO_SCRIPT2_TYPE.SQLDMOScript2_AnsiFile );
  }
 }
}

IObjectItem.cs

using System;

namespace SQLDMOSample.Items
{
 /// <summary>
 /// IObjectItem 偺奣梫偺愢柧偱偡丅
 /// </summary>
 public interface IObjectItem
 {
  void CreateScript(string directoryPath);
 }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值