2012年12月31日月曜日

Eclipseでコマンドプロンプトのウィンドウ(コンソール)を表示する

Eclipseを使用しているときにコマンドプロンプトでコマンドを打ちたい、ということがしばしばある。cmdで起動してcd~とやるのは面倒なので、Eclipseからできるようにする。

Run > ExternalTools > ExternalToolsConfiguration から、外部ツールの設定画面を呼び出す。



プログラムの外部ツールを新規作成し、設定を行う



Working Directory を${project_loc}にしておくと、プロジェクトのフォルダで起動してくれる。
※プロジェクトを選択しない状態で実行するとエラーが出るので注意

指定の方法は他にもあるので、変えてみたい方はこちらを参考。
External tools


これで設定は完了。あとは、外部ツールから動かせばOK。



2012年12月27日木曜日

SqlServerにSQLのみで画像(バイナリ)データを投入する

データの初期セットとしてDBに画像やファイルのデータを入れたいときの方法。Accessだかフォームだかのツールを使う例が多いが、正直そんなのやってられないのでSQLだけで対処する方法です。

CREATE TABLE myTable(Id nvarchar(max), Document varbinary(max)) 
INSERT INTO myTable(Id,Document) 
SELECT 1,img.BulkColumn
FROM (SELECT * FROM OPENROWSET(BULK N'D:\temp\1.jpg',SINGLE_BLOB) AS i ) img


注意点としては、指定するパスはDBサーバー上のものでないといけない、という点(ローカルのパスを指定してもファイルがないといわれる)。

また、実行には一括処理の行える権限(sysadminかbuiladmin?)が必要。


参考
http://weblogs.sqlteam.com/peterl/archive/2007/09/26/Insert-binary-data-like-images-into-SQL-Server-without-front-end.aspx


2012年12月19日水曜日

ASP.NET ボタン連打による複数回PostBackを防止する

ASP.NETでボタンを連打すると、リクエストは全て処理されるが画面に返されるレスポンスは最後の一回のものになってしまう。

これではいかん、ということで連打を防止する場合以下のようにする。


<asp:Button runat="server" ID="BtnSubmit" 
  OnClientClick="this.disabled = true; this.value = 'Submitting...';" 
  UseSubmitBehavior="false" 
  OnClick="BtnSubmit_Click" 
  Text="Submit Me!" />

ポイントはOnClientClickでボタンを無効化する(ついでにボタンテキストも変えている)点と、UserSubmitBehavior="false"にしてある点。

ボタンを無効化しただけだと、ポストバックが発生しなくなってしまう(無効なボタンからポストバックは発生しない)。UserSbumitBehavior=falseは、webにおけるformアクションに頼らず、とにかくPostBackしなさいという意味になるので、これでOK(名前的に起こさなくなりそうだが・・・)。

ページが再ロードされれば無効化したのもボタンのテキストを変えたのも元に戻るので、これにて一件落着。

参考サイト
http://encosia.com/disable-a-button-control-during-postback/



2012年12月17日月曜日

ASP.NET MVC を Appharbor へデプロイする際の注意事項

少しはまったのでメモしておきます。

ASP.NET MVC (今回は最新の4を使用) をAppharborにデプロイする際、デフォルトでは勝手にライブラリをロードしてくれないようです。そのため、packageフォルダをデプロイ対象からはずしているとビルドエラーになります。

・packageのフォルダは基本.gitignoreではずす(重いので)
・しかし、この場合packageのロードが行われずビルドエラーになる(MSB3245 xxx but it didn't exist. が多発する)。

対応として、ビルド時にpackageをロードするようプロジェクトを設定する必要があります。

その方法は公式サイトで公開されています。

パッケージ再ロード設定


このページではプロジェクト>右クリックで「Enable NuGet Package Restore」をしてくれといっているのだが、私の場合「え?そんなメニューないんですけど」という状態でした。
そんなときはこちらをご参考。

Enable NuGet Package Restoreを表示する方法


それでも出ないという場合(私の場合・・・)は、ツール>ライブラリパッケージマネジャー>パッケージマネージャーコンソール でNugetのコンソールを起動し、以下コマンドを実行。


Install-Package NuGetPowerTools
Enable-PackageRestore

Nugetのコンソールツールをインストールして、そこから実行します。

これを実行するとNugetの実行ファイルがプロジェクト内にロードされ、ビルド時にパッケージを読み込んでくれるようになります。

あとはAppharborへデプロイすればビルド完了となると思います。

参考までに、今回使用した.gitignoreを掲載。


*/packages/*
/packages/*
obj/
bin/
TestResults/
_ReSharper.*
*.csproj.user
*.resharper.user
*.resharper
*.suo
*.cache
*~
*.swp
*.resharper.user
*.rptproj.user
*.db
*.sdf
*.tmp