WebSurfer's Home

トップ > Blog 1   |   ログイン
APMLフィルター

DB Publishing Wizard

by WebSurfer 2010年9月23日 13:37

Microsoft SQL Server Database Publishing Wizard という、SQL Server データベース(スキーマとデータの両方) を共有ホスティングサービスのサーバなどに移設するためのスクリプトを自動生成してくれる便利なツールがあります。

このツールは Visual Studio に統合できるようになっていて、開発環境で App_Data フォルダに作ってユーザーインスタンスに接続しているデータベースにも対応できます。

Visual Studio 2008 にはこのツールは同梱されておらず、CodePlex の サイト からダウンロードしてインストールしましたが、Visual Studio 2010 では同梱されていました。

Database Publishing Wizard の起動

上の写真のように、サーバーエクスプローラの mdf ファイルを右クリックし、出てきたコンテキストメニューで Publish to Provider... をクリックするとウィザードが起動します。後はウィザードに従って進めていくだけですが、一応ポイントを書いておきます。

Database Publishing Wizard 開始画面

理由は分かりませんが、Visual Studio をデータベースに接続したまま進めるとエラーになることがあります。その場合はサーバーエクスプローラで切断してから進めてください。

うまくいけば「データベースの選択」画面が表示されます。Visual Studio のサーバーエクスプローラに表示されているデータベース以外に、SQL Server にアタッチされているデータベースも表示されます。

データベースの選択

「出力先の選択」画面でスクリプトファイルの名前と保存先を指定します。下の写真はデフォルト設定のままです。直接、ホスティングサービスのサーバーにパブリッシュできるオプションもあるようですが、やり方が分かりません。(笑)

出力先の選択

「パブリッシング オプションの選択」画面で、詳細設定オプションを選択します。パブリッシュするデータの型は、スキーマのみ、スキーマとデータ、データのみ、の 3 種類の中から選択できます。データを含めると、データが多い場合はスクリプトファイルのサイズがとんでもなく大きくなりますので、データが必要なければ「スキーマのみ」にしておいてください。

パブリッシング オプションの選択

以上で、指定したフォルダに指定したファイル名でスクリプトファイルが作成されます。下の写真は、作成されたスクリプトファイルを SQL Server Management Studio で開いたものです。ホスティングサービスの SQL Server でこのスクリプトを実行すれば、開発環境で作ったデーターベースと同じものが出来上がります。ちなみに、自分の場合スクリプトの実行は、ホスティングサービスが MyLittleAdmin を提供していますので、それを利用しています。

生成されたスクリプト

Tags:

SQL Server

Web サービスで DataTable を送信

by WebSurfer 2010年9月19日 18:06

ASP.NET Web サービスで、普通の System.Data.DataTable を送ろうとすると、シリアル化できないというエラーが出て送ることができません。

Visual Studio のウィザードを使って作る「型付 DataTable」はシリアル化できるようで、それを利用すれば Web サービスから送信でき、受信側でも問題なく「型付 DataTable」を再生して利用できます。

では、DataSet はどうでしょうか?

理由は分かりませんが、自分が検証した結果によれば、少々制約がありました。忘れないように、以下に書いておきます。

(1) 制約その1

「型付 DataTable」を普通の System.Data.DataSet を入れ物に使って送信することができます。ただし受信側で、DataSet から取得した DataTable を送り側で設定した型にキャストできないという制約があります。

送信側(Web サービス)の例

[WebMethod(Description = "普通の DataSet に型付 DataTable を入れて返します")]
public DataSet CreateOrdinaryDataSet()
{
  DataSet ds = new DataSet();

  NorthwindDataSetTableAdapters.CustomersTableAdapter adapterCustomers = 
    new NorthwindDataSetTableAdapters.CustomersTableAdapter();
  ds.Tables.Add(adapterCustomers.GetDataByCountry("Germany"));

  NorthwindDataSetTableAdapters.ProductsTableAdapter adapterProducts =
    new NorthwindDataSetTableAdapters.ProductsTableAdapter();
  ds.Tables.Add(adapterProducts.GetDataByCategoryID(1));

  return ds;
}

受信側(アプリケーション)の例

MyService.Service wsMyService = new MyService.Service();
DataSet ds = wsMyService.CreateOrdinaryDataSet();

// キャストできずエラーとなる。
// MyService.NorthwindDataSet.CustomersDataTable table =
//  (MyService.NorthwindDataSet.CustomersDataTable)ds.Tables[0];

// これは OK
DataTable table = ds.Tables[0];
dataGridView1.DataSource = table;

(2) 制約その2

「型付 DataSet」を入れ物にして送る場合、「型付 DataSet」のメンバーの「型付 DataTable」に Fill するようにしないと、アプリケーション側で DataSet を再生できないという制約があります。

送信側・・・これは OK

[WebMethod (Description="型付 DataSet を返します")]
public NorthwindDataSet CreateDataSet()
{
  NorthwindDataSet ds = new NorthwindDataSet();

  NorthwindDataSetTableAdapters.CustomersTableAdapter adapterCustomers = 
    new NorthwindDataSetTableAdapters.CustomersTableAdapter();
  adapterCustomers.FillByCountry(ds.Customers, "UK");

  NorthwindDataSetTableAdapters.ProductsTableAdapter adapterProducts = 
    new NorthwindDataSetTableAdapters.ProductsTableAdapter();
  adapterProducts.FillByCategoryID(ds.Products, 1);

  return ds;
}

送信側・・・これは NG

[WebMethod(Description = "型付 DataSet を返します(その2)")]
public NorthwindDataSet CreateDataSet2()
{
  NorthwindDataSet ds = new NorthwindDataSet();

  NorthwindDataSetTableAdapters.CustomersTableAdapter adapterCustomers =
    new NorthwindDataSetTableAdapters.CustomersTableAdapter();
  ds.Tables.Add(adapterCustomers.GetDataByCountry("Germany"));

  NorthwindDataSetTableAdapters.ProductsTableAdapter adapterProducts =
    new NorthwindDataSetTableAdapters.ProductsTableAdapter();
  ds.Tables.Add(adapterProducts.GetDataByCategoryID(1));

  return ds;
}

アプリケーション側で CreateDataSet2 を呼び出すと XmlSchemaException がスローされます。エラーメッセージによると、「NorthwindDataSet.xsd:Customers の複数の定義があるため、コンテンツ モデルがあいまいになっています。」ということだそうです。

Tags:

ASP.NET

jQuery の本を買いました

by WebSurfer 2010年9月18日 14:03
jQuery の勉強を始めるために買った本

今さらながらですが、jQuery の勉強を始めようと思って、本を買ってきました。

今の時代の流れは JavaScript ではなく、それをラップしてライブラリ化(正しい表現ではないかも)した jQuery のように思います。

先の記事 Visual Studio 2010 にも書きましたが、Visual Studio 2010 には jQuery が標準で実装されています。

なので、自分もそろそろ勉強を始めて jQuery を使えるようにならないと、時代に取り残されそうです。

もともと、JavaScript の知識はほとんどなかったので勉強しなければと思っていたのですが、いまさら JavaScript の勉強を始めるよりは、これを契機に jQuery の勉強をした方がよさそうだと思ったしだいです。

本屋さんで見た限りでは、ASP.NET と連携して jQuery がどのように利用できるかが述べられているのは、左の写真のものしかなかったので、この本にしました。

最初の何も知らない状態で本を見て、よく分かるのでよさそうだと思って買うと、実は初歩的過ぎる内容で、すぐに物足りなくなって失敗したと思うことがよくあります。

そう思って、少しレベルが高そうな本を買うと、今度は高すぎてほとんど理解できず、本棚にしまいこんだままになってしまうこともよくあって、なかなか自分にぴったりのレベルの本を見つけるのが難しいです。

専門書は高価なので、買った本が合わなかったからといって次から次へと買うわけにも行かず、悩ましいところです。

今度はどうなんでしょうね。とにかく、本を読み進めて、サンプルを動かしてみます。その結果は、またここに書くつもりです。

Tags:

JavaScript

About this blog

2010年5月にこのブログを立ち上げました。主に ASP.NET Web アプリ関係の記事です。

Calendar

<<  2024年5月  >>
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678

View posts in large calendar