4月 2006 - Posts

ASP.net 2.0 でデータソースへの接続文字列を Web.Config 構成ファイルから読み取る

ASP.net 2.0 でデータソースへの接続文字列を Web.Config 構成ファイルから読み取るには、Web.Config 構成ファイルSystem.Configuration.ConfigurationManager クラスを利用します。

Web.Config 構成ファイルの内容

<?xml version="1.0"?>
<configuration>
  <appSettings />
  <connectionStrings>
    <add name="Northwind" connectionString="Data Source=server1;Initial Catalog=Northwind;Integrated Security=SSPI;" providerName="System.Data.SqlClient" />
  </connectionStrings>
  <system.web>
    <compilation debug="true" />
    <authentication mode="Windows" />
  </system.web>
</configuration>

Web.Config 構成ファイルを利用する C# のコード

public string GetTestValue()
{
using (SqlConnection conn = new SqlConnection())
{
conn.ConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings["NorthWind"].ConnectionString;
using (SqlCommand cmd = new SqlCommand())
{
cmd.Connection = conn;
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "CustOrderHist";
// Create a SqlParameter for each parameter in the stored procedure.
SqlParameter customerIDParam = new SqlParameter("@customerID", "ALFKI");
cmd.Parameters.Add(customerIDParam);
object result;
ConnectionState previousConnectionState = conn.State;
try
{
if (conn.State == ConnectionState.Closed)
{
conn.Open();
}
result = cmd.ExecuteScalar();
return result.ToString();
}
finally
{
if (previousConnectionState == ConnectionState.Closed)
{
conn.Close();
}
}
}
}
}

Posted by Ryosuke Uemoto | with no comments

Microsoft が ProClarity を買収

Microsoft がBI用のクライアントソフトウェアを開発している ProClarity という企業を買収したそうです。

Microsoft / ProClarityの買収によるBIプラットフォームの強化を発表
ITmedia / >SQLパートナービジネスを脅かすOLAPの補完戦略

ProClarity社は Microsoft Business Scorecard Manager 2005 や SQL Server 2005 Reporting Services の BI機能を拡張するソフトウェアを開発しているようなので、分析用のサーバである Analysis Services の進化に追いついていない感のある Microsoft のクライアント製品群に活が入ればいいなと思います。

Microsoft SQL Server 2005 Express Edition with Advanced Services がリリースされました

2006年4月18日に Microsoft から Microsoft SQL Server 2005 Express Edition with Advanced Services という SQL Server 2005 Express Edition のパワーアップ版がリリースされました。

このバージョンの特徴は以下の通りです。

中でも Management Studio Express の採用と Reporting Services の搭載には大きなインパクトがあります。

MSDE 2000 や素の SQL Server 2005 Express Edition を採用した場合は データベースの管理を基本的には CUI で行う必要があり、Microsoft 製品とは思えないようなハードルの高さを乗り越えなくてはなりません。

難しい操作を要求されるが故にデータベースの設計やセキュリティが「なおざり」になっている環境というのは多いのではないでしょうか。

今回 SQL Server 2005 Express Edition with Advanced Services に Management Studio Express が搭載されたことで、データベースの管理がとても楽になります。
無償データベースに思い描いた通りの設計やセキュリティを実装する環境が整ったのだと思います。

Reporting Services というのはサーバサイドのレポート(帳票)出力機能です。
データを溜めるためのデータベースエンジンと、データを可視化し活用するためのレポーティングエンジンが併せて供給されるということに意義を感じます。

Reporting Services はサーバサイドの機能ですから、クライアントが動いていない時間帯にバッチ処理的に定型の帳票を生成してハードディスクに出力しておく、といったシナリオで活用することもできます(Standard 以上の Edition では確認済みですが、Express Edition でこのシナリオが可能かどうかは未確認)。

SQL Server 2005 Express Edition には Integration Services が搭載されないので MSDE 2000 で DTS (Data Transformation Services: データ変換サービス) を多用しているようなプロジェクトを移行するのは難しいですが、無償のデータベースエンジンを新規に採用する場合には SQL Server 2005 Express Edition with Advanced Services が有力な候補になるでしょう。

Posted by Ryosuke Uemoto | with no comments

ASP.net 2.0 で GridView に連番(通し番号)を振る方法

ASP.net 2.0 で GridView コントロールの行に連番(通し番号)を付ける方法です。

テンプレート列を利用して Container.DataItemIndex プロパティを呼び出します。
Container.DataItemIndex プロパティに入る数値は 0 から始まりますから、1 を起点にするなら +1 してください。

<asp:GridView>
 <Columns>
  <asp:TemplateField>
   <ItemTemplate>
    <%# Container.DataItemIndex + 1  %>
   </ItemTemplate>
  </asp:TemplateField>
 </Columns>
</asp:GridView>

ASP.net 1.1 の場合は @IT の記事が参考になります。
@IT /[ASP.NET]DataGridコントロールの行に通し番号を付けるには?

SQL Server 2000 Enterprise Manager でテーブルの行数を調べる

SQL Server 2000 でテーブルの行数を調べる手軽な方法は、Enterprise Manager で任意のテーブルのプロパティを表示し、[行:]項目を確認することです。

SQL Server プロファイラ を使用して Enterprise Manager が [行:]項目 を表示するまでの動作を追ってみると、sp_MStablespace というストアドプロシージャを利用していることに気づきます。

sp_MStablespace ストアドプロシージャは、そのロジックの中で

SELECT @rows = convert(int, rowcnt)
FROM dbo.sysindexes
WHERE indid < 2 and id = @id

というクエリを実行しています。
確かに dbo.sysindexes テーブルの rows 列を取得することでテーブルの行数を高速に取得することが出来るのですが、この方法では正しい行数が取得できないときがあります。
dbo.sysindexes テーブルに各テーブルに於けるインデックスの状態が正しく記録されていない場合です。

こういった場合は dbo.sysindexes テーブルを正常な状態に回復する作業が必要です。
DBCC UPDATEUSAGE ステートメントを利用して rows 列を訂正するのが常道ですが、テーブルのインデックスを一度削除して張り直すことでも回復するようです。

Posted by Ryosuke Uemoto | with no comments

Internet Explorer の ActiveX コントロールに関する仕様変更

Windows Update (Microsoft Update) にて 4月のセキュリティ更新プログラムが 4月12日から配布されています。
その中に KB91945 という更新プログラムがあるのですが、これが Windows に適用されると Internet Explorer で ActiveX コントロールを閲覧したときの挙動が変化します。
具体的には、applet, embed,または object 要素を使用して Webページに埋め込まれている Flash コンテンツや Excel のオブジェクト等の ActiveX コントロールはユーザーが明示的にクリックするまで動作しなくなります。

webの制作側にもユーザーにも迷惑な仕様変更ですが、特許に関する係争が原因のようです。

Web制作者は早々に対応しなければならない問題だということで、Microsoft や Macromedia(Adobe) からこの仕様変更への対応策が発表されています。

Microsoft: ActiveX コントロールのアクティブ化
Macromedia(Adobe): アクティブコンテンツデベロッパーセンター

弊社は社内で業務分析用に Windows Sharepoint Services の Webパーツとして Office ピボットテーブル を利用しているのですが、これも ActiveX コントロールとして動作します。
既製の Webパーツということで、今回の仕様変更には簡単に対応できそうもありません。
何とかならないか調査が必要です。

Posted by Ryosuke Uemoto | with no comments

NetBIOS名のサフィックス

本来 NetBIOS名は16文字まで使用できるのですが、Microsoft は Windows のために用意した 「Microsoft ネットワーク」 という仕組みのために NetBIOS名を15文字に制限しています。16番目の文字は、NetBIOS名を与えられたホストにインストールされている機能を識別するための識別子として機能しています。

16番目の文字の一覧はこちらのリファレンスを参照してください。
NetBIOS 名のリファレンス

Posted by Ryosuke Uemoto | with no comments

SQL Server 2005 Express Edition からデータをエクスポートする方法

SQL Server からデータを CSV や TSV といったフラットファイル形式でエクスポートするには、SQL Server に付属する bcp ユーティリティ を利用します。

SQL Server 2000 の Enterprise Manager や SQL Server 2005 の SQL Server Management Studio といった GUIツールを利用してエクスポートするのが手軽ですが、SQL Server 2005 Express Edition のような GUIツールが付属しない (SQL Server 2005 Service Pack1 Express には GUIツールが付属するようです) 製品を導入した場合には bcp ユーティリティのようなコマンドラインツールのお世話になります。

bcp ユーティリティの使い方はこんな感じです。

テーブルをエクスポート
bcp "データーベース.スキーマ.テーブル" out c:\file.csv -c -t "," -T -S localhost\sqlexpress

クエリを元にエクスポート
bcp "SELECT * FROM データーベース.スキーマ.テーブル" queryout c:\file.csv -c -t "," -T -S localhost\sqlexpress

Posted by Ryosuke Uemoto | with no comments

Active Directory とは何か

Windows Server System の認証基盤として重宝される Active Directory とは、そもそも何なのか。
簡潔にまとめると次の3点を統合した環境です。

・認証を司る機能: Kerberos
・ディレクトリを司る機能: LDAP (Lightweight Directory Access Protocol)
・管理を司る機能: Group Policy

ちなみに、Active Directory から LDAP だけを切り出したのが ADAM (Active Directory Application Mode) という技術です。
例えば、Active Directory のスキーマを拡張したいけれど手続き上の問題で実現が難しい、といった問題を解決するために、スキーマの外部格納庫として ADAM を利用できます。

Posted by Ryosuke Uemoto | with no comments

SQL Server 2005 のテーブルスキーマを取得する方法

@IT のフォーラムで VBA から SQL Server 2005 のテーブルスキーマを取得する方法を尋ねる投稿がありました。
@IT / SQLSqrverでDECIMAL型フィールドの整数桁数を取得したい

回答として鎌田さんが提示された方法はこうです。

SQLServerには使ったことがありませんが、ADOXにはADOX.columnに precisionとNumericScale というプロパティが存在します。

私は SQL を使う方法を提示しました。

SELECT syscolumns.name AS 列名
, syscolumns.xprec AS 有効桁数
, syscolumns.xscale AS 小数点以下桁数
FROM syscolumns
LEFT OUTER JOIN sysobjects
ON syscolumns.id = sysobjects.id
WHERE sysobjects.name = N'テーブル名'

どちらの回答を採用しても解決できたようなので何よりですが、私が提示した方法は SQL Server 2000 時代の手法であり、SQL Server 2005 では別の方法が推奨されています。

SQL Server 2005 では上記クエリがこうなります。

SELECT sys.columns.name AS 列名
, sys.columns.precision AS 有効桁数
, sys.columns.scale AS 小数点以下桁数
FROM sys.columns
LEFT OUTER JOIN sys.tables
ON sys.columns.object_id = sys.tables.object_id
WHERE sys.tables.name = N'テーブル名'

クエリの構造自体は同じですが、SQL Server 2000 用のクエリが sysobject, syscolumns という 互換性ビュー を使用していたのに対して、SQL Server 2005 用のクエリでは sys.tables, sys.columns という カタログ ビュー を使用するように変更されています。

sysobject, syscolumns も互換性のために SQL Server 2005 に残されていますのでそれを使用するクエリは問題なく動作しますが、新たに構築するクエリに関しては カタログ ビュー を使用した方が良いでしょう。

Windows Server 2003 R2 の DFS ではファイルのコピーが高速化される

Windows Server 2003 R2 のセミナーに参加しました。

配布された資料によりますと、DFS (Distributed File System: 分散ファイルシステム) 関連の新機能である RDC (Remote Differential Compression: 差分圧縮複製技術) の恩恵により、ファイル複製時の帯域削減比がファイルの種類によっては通常のコピーと比較して300倍ほどになるそうです。

つまり、ISDN やダイアルアップなど帯域の心許ない回線で結ばれた拠点間のファイルコピーが大幅に高速化されるのだそうです。

293MのPST (Outlook) 約300倍
2.4MのXLS (Excel) 約30倍
2.6MのDOC (Word) 約15倍
と、こんな感じだそうです。

もちろん環境によって結果は異なるのでしょうが、この新機能は検討する価値がありそうです。

Posted by Ryosuke Uemoto | with no comments