新しいシステムを構築するためにSQLServer2005 DeveloperEditionをインストールし、サンプルプログラムから接続しようとしたところ、「SQL Server の既定の設定がリモート接続を許可しないようになっていることがエラーの原因である可能性があります....」というようなエラーが出た。
調べてみるとSQLServer2005ではデフォルトでネットワーク接続が無効になっているらしい。はて?Express版を以前使ったときも同じエラーがしたかな?と思ったが随分と昔のことなので思い出せない(^^;
最近のMicrosoft製品は「デフォルトセキュア」つまり、既定ではセキュリティが最も厳しい状態(安全性が最も高い状態)でセットアップされるようである。
ここに参考資料があるので一読してみよう。
http://www.microsoft.com/japan/sql/ssj/tips/01.mspx
続きを読む
2007年07月27日
2007年07月25日
DropDownListのAppendDataBoundItemsは問題あり
DropDownListにバインドしたデータとは別に「選択してください」とか「全て」とかいった非バインドデータを追加したいことがある。
この場合の処理で参考書とかによく掲載されているのがAppendDataBoundItemsプロパティを使う方法だ。しかし、実際の現場で使うときに非常に困った現象が起きる場合がある。
今回はその例と回避方法を紹介する。
DropDownListコントロールを単独で使う場合では問題は起きない。
どういう状況で起きるかといえば、データベースのリレーションによる階層(関連)データを絞り込む場合である。
下図サンプルは、OrderテーブルのOrderIDがCustomerIDとEmployeeIDによって絞り込まれる様子である。
1.DropDownListの標準使用では条件にあった件数(この場合は2件)分のデータがリストに追加される。(左DropDownList)
2.AppendDataBoundItemsを有効にした場合、2セット(4件)重複して追加されてしまう。(中央DropDownList)
これはページロード時に、CustomerIDのDropDownListとEmployeeIDのDropDownListにデータがバインドされる度にOrderIDのDropDownListに連動されてバインドが実行され、さらに自分自身がバインドした結果だと思う。
これを回避する方法はいろいろ試した結果、AppendDataBoundItemsプロパティを使わずに
3.Item.InsertメソッドをDataBoundイベントの中で実行する方法である。(右DropDownList)
余分に追加することがないように条件をつけてある。

※画面は合成したもの
この場合の処理で参考書とかによく掲載されているのがAppendDataBoundItemsプロパティを使う方法だ。しかし、実際の現場で使うときに非常に困った現象が起きる場合がある。
今回はその例と回避方法を紹介する。
DropDownListコントロールを単独で使う場合では問題は起きない。
どういう状況で起きるかといえば、データベースのリレーションによる階層(関連)データを絞り込む場合である。
下図サンプルは、OrderテーブルのOrderIDがCustomerIDとEmployeeIDによって絞り込まれる様子である。
1.DropDownListの標準使用では条件にあった件数(この場合は2件)分のデータがリストに追加される。(左DropDownList)
2.AppendDataBoundItemsを有効にした場合、2セット(4件)重複して追加されてしまう。(中央DropDownList)
これはページロード時に、CustomerIDのDropDownListとEmployeeIDのDropDownListにデータがバインドされる度にOrderIDのDropDownListに連動されてバインドが実行され、さらに自分自身がバインドした結果だと思う。
これを回避する方法はいろいろ試した結果、AppendDataBoundItemsプロパティを使わずに
3.Item.InsertメソッドをDataBoundイベントの中で実行する方法である。(右DropDownList)
余分に追加することがないように条件をつけてある。
※画面は合成したもの
'--上記2の処理--
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) _
Handles Me.Load
If Not IsPostBack Then
ddlOrder.Items.Clear()
ddlOrder.Items.Add(New ListItem("全て", ""))
ddlOrder.AppendDataBoundItems = True
End If
End Sub
'--上記3の処理--
Private Sub ddlOrder2_DataBound(ByVal sender As Object, ByVal e As System.EventArgs) _
Handles ddlOrder2.DataBound
If ddlOrder2.Items.Count = 0 Or _
(ddlOrder2.Items.Count > 0 AndAlso ddlOrder2.Items(0).Text <> "全て") Then
ddlOrder2.Items.Insert(0, New ListItem("全て", ""))
End If
End Sub
Web.Config には記述する順番がある
2007年07月06日
VistaでInternetExplorerのURLを取得する場合の注意
以前、既存アプリケーションのVista対応について6回にわたって注意事項や対策を紹介したが、今回はその番外編である。
前回、いろんな対策があるが一番手っ取り早いのはビルトインユーザのAdministratorでログオンさせれば、これまで同様に使うことが可能だと紹介した。しかし、Administratorであるがゆえに問題が発生する場合があることも最近わかった。この問題について私がMicrosoftへ照会し、それについてMicrosoftの公式見解として、同社の了解を得て紹介するものです。
自作ソフトのScreenCutter(シェアウェア版)にはIEの画面をキャプチャーする機能がある。

上記メニューをクリックすると現在IEで開いているURLを全て取得してそのなかからキャプチャーしたいURLを選択することが可能なのだが実はVistaではURLの取得に失敗してしまうのだ。
当初IE7のタブブラウザが問題なのかと思ったがXPのIE7では正常に取得できたのでVista固有の問題だと思い、いろいろ調べ、代替策も探してみたが見当たらず途方にくれていた。そこでMicrosoftに問い合わせてみたところ、VistaのしかもビルトインユーザーのAdministratorでの障害であることが判明した。正確に記すと以下のようになる。
「ビルトインの Administrator アカウントで Internet Explorer を起動している場合に、ShellWindows オブジェクトに Internet Explorer オブジェクトが正しく追加されないという問題」
よって、Adiministrator以外のユーザーであれば何でも良く、AdministratorsやUsersグループのユーザーで確認したところ正常にURLが取得できたのである。
何ともはや・・・・Administratorは万全では無かったというわけである。他に同様のAdministratorの不具合があるのかは不明だが、Microsoftでは次のように答えている。
「Windows Vista では Administrator のアカウントは特殊なアカウントであり、できれば使用されないことが望ましく、Administrator アカウントでは UAC が ON であってもすべてのプロセスは整合性レベル高にて動作することから、実質的には UAC が OFF の場合との差がない・・・云々」(※一部文章表現は当方で編集)
ということで参考にしましょう。
前回、いろんな対策があるが一番手っ取り早いのはビルトインユーザのAdministratorでログオンさせれば、これまで同様に使うことが可能だと紹介した。しかし、Administratorであるがゆえに問題が発生する場合があることも最近わかった。この問題について私がMicrosoftへ照会し、それについてMicrosoftの公式見解として、同社の了解を得て紹介するものです。
自作ソフトのScreenCutter(シェアウェア版)にはIEの画面をキャプチャーする機能がある。
上記メニューをクリックすると現在IEで開いているURLを全て取得してそのなかからキャプチャーしたいURLを選択することが可能なのだが実はVistaではURLの取得に失敗してしまうのだ。
当初IE7のタブブラウザが問題なのかと思ったがXPのIE7では正常に取得できたのでVista固有の問題だと思い、いろいろ調べ、代替策も探してみたが見当たらず途方にくれていた。そこでMicrosoftに問い合わせてみたところ、VistaのしかもビルトインユーザーのAdministratorでの障害であることが判明した。正確に記すと以下のようになる。
「ビルトインの Administrator アカウントで Internet Explorer を起動している場合に、ShellWindows オブジェクトに Internet Explorer オブジェクトが正しく追加されないという問題」
よって、Adiministrator以外のユーザーであれば何でも良く、AdministratorsやUsersグループのユーザーで確認したところ正常にURLが取得できたのである。
何ともはや・・・・Administratorは万全では無かったというわけである。他に同様のAdministratorの不具合があるのかは不明だが、Microsoftでは次のように答えている。
「Windows Vista では Administrator のアカウントは特殊なアカウントであり、できれば使用されないことが望ましく、Administrator アカウントでは UAC が ON であってもすべてのプロセスは整合性レベル高にて動作することから、実質的には UAC が OFF の場合との差がない・・・云々」(※一部文章表現は当方で編集)
ということで参考にしましょう。
2007年07月05日
CSV出力時の不具合
GridViewに表示した内容をCSV出力する処理を作っていてちょっと困った現象があったので、それを今回のTipsとして紹介する。
といってもCSV出力自体の方法ではない、出来上がったCSV出力データを開いたり保存したりする時の問題である。

上記画面が出た後、「開く」や「保存」を選んでも下図の画面から先に一向に進まないのである。

このとき、一度「キャンセル」させて再度実行すると次からは正常に開いたり保存できたりするのだ。
ユーザーに一度キャンセルしてくださいなどと言い訳するわけにもいかないのでいろいろ調べてみたがどうやっても直らない。
そこで、この問題とは関係なくもともとCSV出力時に確認ダイアログをつける予定だった処理を付け加えたところ、何とそれによって問題はあっさり解決した。
その処理は、下図のようにボタンにJavaScriptを追加するものである。

こうすることで出力ボタンを押すと

が表示され、これ以降は正常に処理が進むのである。
ただ、本当の原因は別なところにあるようで、このワンクッションを付けなくても正常に進む場合もあった。
そういうわけで、もし途中で止まるような場面があったらこうしたらというTipsです。
といってもCSV出力自体の方法ではない、出来上がったCSV出力データを開いたり保存したりする時の問題である。
上記画面が出た後、「開く」や「保存」を選んでも下図の画面から先に一向に進まないのである。
このとき、一度「キャンセル」させて再度実行すると次からは正常に開いたり保存できたりするのだ。
ユーザーに一度キャンセルしてくださいなどと言い訳するわけにもいかないのでいろいろ調べてみたがどうやっても直らない。
そこで、この問題とは関係なくもともとCSV出力時に確認ダイアログをつける予定だった処理を付け加えたところ、何とそれによって問題はあっさり解決した。
その処理は、下図のようにボタンにJavaScriptを追加するものである。
こうすることで出力ボタンを押すと
が表示され、これ以降は正常に処理が進むのである。
ただ、本当の原因は別なところにあるようで、このワンクッションを付けなくても正常に進む場合もあった。
そういうわけで、もし途中で止まるような場面があったらこうしたらというTipsです。

