Posted on 12 月 21, 2009 in プログラミング by K.NNo Comments »

プログラム内からSQLServerのスキーマ定義を取得する方法がないか調べていると、SMO、SQL-DOMというのがあるらしい。
SQL Server 管理オブジェクト (SMO)
試しにVB.NETのサンプルコードをC#に書き換えて試してみると、確かにテーブル作成クエリが取得できる。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.SqlServer.Management.Smo;
using Microsoft.SqlServer.Management.Common;
using Microsoft.SqlServer.Management.Sdk.Sfc;
using System.Collections.Specialized;

namespace SMOTests
{
class SMOTest
{
public void CreateScript()
{
Server srv = new Server();
Database db = srv.Databases["データベース名"];
Scripter scrp = new Scripter(srv);
scrp.Options.ScriptDrops = false;
scrp.Options.WithDependencies = true;

foreach (Table tb in db.Tables)
{
Urn[] smoObjects = new Urn[1];
smoObjects[0] = tb.Urn;
if (!tb.IsSystemObject)
{
StringCollection sc = scrp.Script(smoObjects);
foreach (string st in sc)
{
Console.WriteLine(st);
}
}
}
}
}
}

ちなみに、Microsoft.SqlServer.SmoEnum.dllがなくて悩んだけど、以下を参考にMicrosoft.SqlServer.Management.Sdk.Sfc.dllを代わりに参照に追加で解決(ただ配布環境にないこともありそうなので要考慮)
SQL Server 2005 版の SMO を使用しているアプリケーションで SQL Server 2008 版の SMO の新しい機能を使用する方法


人気ブログランキングへ

システム開発・ホームページ作成のことなら 創屋株式会社 創屋ぷれす
AWS Amazon EC2/S3 クラウド のことなら 創屋株式会社
データマイニング テキストマイニング のことなら 創屋株式会社

マイマイ(My Mining/マイ マイニング)
議事録作成システム MYNA(マイナ)
Posted on 12 月 21, 2009 in プログラミング, 社内 by K.NNo Comments »

サーバとクライアントにインストール済みのSQLServer間で大量のデータを転送(同期)する必要があり、少し調べてみました。

  • DTS
  • bcp(またはSqlBulkCopy)
といったあたりが使えるそうです。
今回はプログラム内から処理が必要なので、.NET FrameworkのSqlBulkCopyというクラスを検証してみました。
SqlBulkCopyクラス

環境は以下の通り。
社内LAN接続
サーバ:SQL Server 2000
クライアント:SQL Server Express 2005
データ: 約14万行

サーバからSqlDataReaderで読み込んで、SqlBulkCopyでクライアントへ全データコピーに約12秒。
同じく、クライアントからサーバへの全データコピーに約90秒。
サーバ側からは満足の行く速度かな。実際にはもっとデータ量は減るはず。
クライアント側からの転送が遅いのはPC、OSの性能差?クライアントからサーバへはさらにデータ量が少ないのであまり問題にはならないかな。

課題が1つあって、INSERTしかできない点。既に同じPKのレコードがあると制約違反になります。
解決方法は海外のサイトで検索すると、一時テーブルなり同期用のテーブルなりを用意して必要なデータをBulkCopy。
その後、ストアドプロシージャでINSERT、UPDATEの処理をすれ、とのこと。
Looking for a SqlBulkCopy that can do UPDATE…

同じインスタンス内であればTransact-SQLのINSERT SELECTのほうがBulkCopyよりも高速とMicrosoftのヘルプに書いてあるので、この組み合わせで検証中です。


人気ブログランキングへ

システム開発・ホームページ作成のことなら 創屋株式会社 創屋ぷれす
AWS Amazon EC2/S3 クラウド のことなら 創屋株式会社
データマイニング テキストマイニング のことなら 創屋株式会社

マイマイ(My Mining/マイ マイニング)
議事録作成システム MYNA(マイナ)
Posted on 12 月 21, 2009 in プログラミング, 雑談 by K.NNo Comments »

標準のMS IMEからGoogle日本語に変更しました。
使い勝手はMS IMEよりよいですね。ATOKとの比較はもうかなり長い間使っていないので比較できませんが、ネット上ではまだATOK優勢の意見が多く、辞書としての正確さという点で疑問視される方もいるみたいですね。

現在開発中のシステムでは日本語の変数やテーブルのフィールド名を使用しているので、最近入力した候補が表示されるのは便利。
Visual Studioの IntelliSenseとともに、かなり有効に機能しています。
たまに反応が遅い時があるのはスワップしてしまっているせい?


人気ブログランキングへ

システム開発・ホームページ作成のことなら 創屋株式会社 創屋ぷれす
AWS Amazon EC2/S3 クラウド のことなら 創屋株式会社
データマイニング テキストマイニング のことなら 創屋株式会社

マイマイ(My Mining/マイ マイニング)
議事録作成システム MYNA(マイナ)
【営業エリア】
北陸・東海・関東・近畿
石川県(加賀市・かほく市・金沢市・小松市・珠洲市・羽咋市・白山市・七尾市・能美市・輪島市・川北町・野々市町・津幡町・内灘町・志賀町・宝達志水町・中能登町・穴水町・能登町)
富山県・福井県
岐阜県・愛知県
東京都・神奈川県・千葉県・埼玉県・群馬県
大阪府・兵庫県・京都府・滋賀県・奈良県
Theme by Got Chance and Nitrogen DesignsPowered by Wordpress