2011年9月30日金曜日

MS-SQLで階層を表現する

LevelPath順に表示したい場合
ItemNo+LevelのItemNoを追加した
ただし、ItemNoが数字属性なので、すべてにおいてCASTしないと
下記のエラーが表示される
Types don't match between the anchor and the recursive part in column "ColumnName" of recursive
query "CTE_Name"


WITH BOM(Lv1, ItemNO, ChildPN, ChildPartName, Quantity,
ParentPN, LevelPath)
AS
(SELECT 1 AS Lv1, ItemNo, ChildPN, PartName, Quantity, ParentPN, CAST('/' + RIGHT('000' + CAST(ItemNo as varchar(256)),3) as varchar(256)) as LevelPath
FROM UP_BOM
INNER JOIN UP_Item I1 ON i1.PartNo = ChildPN
WHERE ParentPN = 'J073-185 '
UNION ALL
SELECT h.Lv1 + 1, d.ItemNo, d.ChildPN, i2.PartName, d.Quantity, d.ParentPN, CAST((RTRIM(h.LevelPath) + '/' + RIGHT('000' + CAST(d.ItemNo as varchar(256)),3)) as varchar(256)) as levelPath
FROM UP_BOM d
INNER JOIN BOM h ON h.ChildPN = d.ParentPN
INNER JOIN UP_Item I2 ON i2.PartNo = d.ChildPN)
SELECT Lv1, ItemNo, ChildPN, ChildPartName, Quantity, ParentPN, LevelPath
FROM BOM
ORDER By LevelPath

MS-SQLで階層を表現する

with c as (
select '/'+cast(billID as varchar(49)) as path,BillID
from dbo.bill b
where b.parentBillID is null
union all
select cast(c.path+'/'+CAST(b.billID as varchar(4)) as varchar(50)), b.billID
from dbo.bill b join c on b.parentBillID = c.billID)
select c.path+'/',b.descr
from c join dbo.bill b on c.billID = b.billID
order by 1;

MS-SQLの階層にRowNumみたいな順番が無いので、一番最初の項目にlevelを表現している。

2011年9月29日木曜日

asp.net MVCを使用する場合、ASPXエンジンは無効化しておこう

[参考]ASPXエンジンは無効化しておこう

 ASP.NET MVC 3はデフォルトで、WebFormViewEngine(ASPX)/RazorViewEngineエンジンを有効にしている。しかし、アプリケーションでRazorしか利用していないならば、ASPXエンジンは除去しておくのが望ましいだろう。

 これによって、ASPXテンプレート検索のオーバーヘッドがなくなるので、わずかながらパフォーマンスが改善する(この事情は、部分ビュー検索の場合だけでなく、通常のビュー、レイアウトでも同じだ)。

 ASPXエンジンを除去するには、Global.asaxのApplication_Startイベント・ハンドラーに以下のようなコードを記述すればよい。
protected void Application_Start() {
ViewEngines.Engines.Clear();
ViewEngines.Engines.Add(new RazorViewEngine());
……中略……
}
Sub Application_Start()
ViewEngines.Engines.Clear()
ViewEngines.Engines.Add(New RazorViewEngine())
……中略……
End Sub

2011年9月28日水曜日

asp.netで、戻るボタンを無効にする

<body onload="history.forward();">

asp.netで、本番では、InProcでセッション管理をしない

ビューステート/セッション を使用する際に注意する点を改めてまとめておきます。

ビューステート
・ビューステート には他人に知られて困るデータ格納しない
・ビューステート のサイズに気をつける
・ビューステート の暗号化はしっかりとテストしてから使う

セッション
・InProc を使わない
・セッションがあることを前提に処理を行わない

InProcの場合、iis再起動でWebApplicationも再起動が必要なので
出来れば、本番環境では、InProcを使用しない。

セッションモードMSDNの資料
http://msdn.microsoft.com/ja-jp/library/ms178586%28VS.80%29.aspx

2011年9月27日火曜日

Telerik.Web.UI.ExpressionParser.ParsePrimaryStart()

Telerik.Web.UI.ExpressionParser.ParsePrimaryStart()

With the .NET 3.5 build of RadGrid for ASP.NET AJAX and LINQ filter expressions enabled (EnableLinqExpressions = true), the filter expressions set for the grid either internally by its filtering mechanism or manually in code should conform to the LINQ expression syntax instead of the old T-SQL syntax. Only thus they will be evaluated properly by the control.

EnableLinqExpressions = False is T-SQL

通常は、EnableLinqExpressions=trueだからLinq形式になっている。
T-SQL形式にする場合はm上記をfalseにする。

2011年9月22日木曜日

C# ASP.NET mappath

Pageが有る場合
Label1.Text = Server.MapPath("./");
// 出力例:C:\WebSites\WebSite1\

Pageが無い場合
HttpContext.Current.Server.MapPath("./");
// 出力例:C:\WebSites\WebSite1\

2011年9月17日土曜日

asp.netでenterkeyを無効にする方法

http://msdn.microsoft.com/ja-jp/library/cc766700.aspx

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

form1.Attributes("onkeydown") = "if(event.keyCode==13){
if(window.event.srcElement.type!='submit' &&
window.event.srcElement.type!='textarea'){
return false;
}
}"

End Sub

2011年9月14日水曜日

LINQ TO SQLのUpdateが失敗する

LINQ TO SQLのUpdateが失敗する。

テーブルにプライマリーキーが無いと更新してくれないらしい。
エラー表示もしないので、気が付かなかった。

2011年9月8日木曜日

Oracle11g ユーザー期限切れ

とりあえず、10gまで通り(パスワードは無期限有効)にする設定、ロックされたアカウントを復旧させる設定をメモっておく。
1. SQLPlusを起動:
   sqlplus /nolog
2. SYSDBAでログイン:
   conn /as sysdba
3. アカウントのプロファイルがデフォルトのままである場合は、デフォルトプロファイルの設定でパスワードを無期限有効に変更:
   alter profile default limit password_life_time unlimited;
4. ユーザのパスワードを再設定:
   alter user ユーザ名 identified by 新パスワード;
5. ロックされていたアカウントをロック解除
   alter user ユーザ名 account unlock;

2011年9月1日木曜日

Telerik RadGridのFilterで大文字小文字の区別をしない

Telerik RadGridのFilterで大文字小文字の区別をしない

たぶん
<groupingsettings CaseSensitive="false" />
コレを追加すると解消される