2009年11月26日木曜日

[Silverlight]SilverlightアプリをIIS以外に配備する場合の注意事項

以前書きましたが、SilverlightアプリケーションはJavaAppletやFlashと同じようにブラウザ上でActiveXとして動作します。
そのため、IISがない環境でもよいということに成ります。がmimeの設定が必要になります。
たとえばApacheに配備する場合、設定ファイル(.htaccessもしくはhttpd.conf)に以下を加える必要があるようです。定義的にはこんなかんじ。

.xaml application/xaml+xml
.xap application/x-silverlight-app

2009年11月25日水曜日

[他]SQLServerインストール後のホスト名変更

SQLServerをインストールしたマシンのホスト名を変更すると、SQLServerが起動しなくなってしまいます。で、調べてみると、ホスト名を変更するsp_dropserverというストアドがあることがわかりました。
SQL Server 2005 スタンドアロン インスタンスをホストするコンピュータの名前を変更する方法」が参考になります。

とはいえ、SQLServerが起動しないのでストアドを実行することができないじゃん!って思ったんですが、いったん元のホスト名に戻してから実行すればよいということに気づきました。ということで事なきを得ました。

2009年11月20日金曜日

[.NET]CSVデータを操作する(OleDb)(その3 結合)

ふと思ったんですが、CSVファイル同士でのSQL的な結合が可能であれば、ファイル連携するようなバッチシステムを組む場合、DBサーバの負荷を下げたシステムを組めるのでは?と思いちょっとやってみました。
やってみたところ、あっさりできてしまいました。コードはこんな感じ。

private void button1_Click(object sender, EventArgs e)
{
    //using System.Data.Odbc; 

    string csvDir = @"d:\temp";
    string csvFileName = "Text1.csv";
    string csvFileName2 = "Text2.csv";

    //ODBC接続文字列を組み立てる 
    OdbcConnectionStringBuilder builder = new OdbcConnectionStringBuilder();
    builder["Driver"] = "Microsoft Text Driver (*.txt; *.csv)";
    builder["dbq"] = csvDir;
    builder["Extension"] = "text;HDR=No;FMT=Delimited\"";

    System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();
    sw.Start();

    using (OdbcConnection con = new OdbcConnection(builder.ConnectionString))
    {
        con.Open();
        string strSQL = "SELECT T1.* FROM (" + csvFileName + " T1 INNER JOIN " + csvFileName2 + " T2 ON T1.F1=T2.F1)";

        using (OdbcCommand cmd = new OdbcCommand(strSQL, con))
        using (OdbcDataReader rd = cmd.ExecuteReader())
        {
            StringBuilder sb = new StringBuilder();
            //カラム名を取得し、カンマ区切りで編集します
            for (int col = 0; col < rd.FieldCount; col++)
            {
                sb.Append(rd.GetName(col)).Append(",");
            }
            sb.Remove(sb.Length - 11);
            System.Diagnostics.Debug.WriteLine(sb);

            //データを取得しカンマ区切りで編集します
            while (rd.Read())
            {
                sb.Length = 0;
                for (int col = 0; col < rd.FieldCount; col++)
                {
                    sb.Append(rd.GetValue(col)).Append(",");
                }
                sb.Remove(sb.Length - 11);
                System.Diagnostics.Debug.WriteLine(sb);
            }
        }
    }
    sw.Stop();
    label1.Text = String.Format("完了{0:#,##0}ms", sw.ElapsedMilliseconds);
}

2009年11月18日水曜日

[Silverlight]Silverlight Tools 3 インストール失敗

詳細なメッセージは忘れてしまいましたが、プロキシ関係でID/PW照合が必要な場合、Silverlight Tools 3のインストールが失敗するようです。エラーメッセージ的には「ハッシュ値が一致しません」的なものです。

で、対処方法としては、オフラインインストール。
いろんなサイトに紹介されているようなので、詳細は割愛。


  1. Silverlight_Tools.exe /x でインストーラを展開

  2. エラーログ(インストール失敗画面の詳細リンク押下で表示される)より、ログを確認

  3. ダウンロードが失敗したファイルを手動でダウンロードし、1.と同じフォルダに格納

  4. 1.にある、インストーラっぽいものを起動

2009年11月12日木曜日

[Silverlight]VWD+Silverlight Tools 3

Silverlightの開発環境は、Visual Web Developer + Silverlight Toolsを使えば無料でそろえることができます。

で、先日までSilverlight Tools2を使っており、最近Silverlight Tools3に入れ替えました。すると、なぜかxamlのプレビュー画面が出ません。いろいろ調べると、下のペインとxamlのペインの隙間をドラッグすると表示されるようになるようです。詳しくはMSDNフォーラムのXAMLプレビュー画面で。

で、やってみましたが、正式サポートではないこともあり、私の作ったサンプルはほとんどエラー画面で終了でした。。。
画面はExpression Blendで。ってことなんでしょうか。業務アプリみたいなシンプルな画面では、あまり凝った画面はいらないんですけどねぇ。

2009年11月10日火曜日

[Silverlight]Silverlightってなんすか?(その2)

Silverlightとは私的にはクライアントGUIアプリというふうに解釈しています。
でも、JavaApplet同様に、特定のリソースにしかアクセスすることができません。SandBoxっていう仕掛けだったと思います。

JavaAppletでもそうでしたが、Silverlightから直接SQL発行はできないようです。そうなると、データのストレージは?というと、Webサービスってことになるんだろうか。。。

2009年11月5日木曜日

[Silverlight]Silverlightってなんすか?

最近調査で、Silverlightを触る機会がありました。Silverlightについては、名前と概要しか知らないところからスタートでした。で、調べてみると、私的には大まかに以下の2つと解釈しました。


  • ActiveXにて、ブラウザ上にGUIを表示する

  • Webを使ったプログラム配信(Out Of Browser)

・・・ってコレってJavaでいうところのアプレットと、今までのClickOnceの名前を変えただけでは?と思えてしまいます。。。

[ASP.NET]ログインユーザの偽装

ASP.NETでとSQLServerが別のマシンで動作している場合に、OS認証でSQLServerの接続をしたい場合、IISの実行ユーザ?で接続しにいってしまいます。
コレを別のアカウントとして偽造するために、Web.configまたはmachine.configに定義設定する必要があります。<System.Web>配下に以下の定義を追加します。これは特定のユーザーでログインしたい場合の例です。

<identity impersonate="true" userName="accountname" password="password" />


どこかのサイトで、userNameがusernameと紹介されていて、コレをコピペして「デキネーじゃん」と思っていましたが、エラーメッセージをよく見ると「大文字と小文字を区別します」旨記載がありましたので、ようやく気づきました。

2009年11月1日日曜日

[他]テーブルの種類(SQLServer)

SQLServerにはユーザ定義で利用できるテーブルっぽいものが何種類かあります。でもどれがどう。というのがよくわかりません。ということでわかる範囲列挙してみました。

  1. パーマネントテーブル : 通常?のテーブル。
  2. グローバル一時テーブル : テーブル名の先頭に「##」をつけてCREATEしたテーブル。複数のセッションで共有できる一時テーブル
  3. ローカル一時テーブル :テーブル名の先頭に「#」をつけてCREATEしたテーブル。該当のセッション内のみで使用できる一時テーブル。
  4. テーブル変数 : DECLARE xxx TABLEした変数。ローカル一時テーブルのインデックス・ユニーク制約など仕えない版?

こんなところでしょうか。3と4の使い分けがいまいちよくわかりませんが、[INF] よく寄せられる質問 - SQL Server 2000 - table 変数 が参考になりますね。