2007年12月25日 星期二

如何連結非預設port的sql server

伺服器名稱後面加上 "," 再加上port
example: MySqlServer.MyDomain.com,3821

題外話
oracle是用 ":" 區隔
大家都不一樣
真是機車ˋˊ

2007年12月19日 星期三

ASP.NET如何使用表單驗證

一種方式是利用Visual Studio 2005提供的登入控制項,不過必須使用內建的ASP.NET 成員資格,也就是說如果系統已經有使用者資料表格會無法套用,且登入控制項格式固定,無法做彈性的變化

另外就是自行設計驗證網頁,於form中放置填入帳號及密碼的輸入方塊,submit後寫一段驗證程式來驗證帳號密碼是否正確,然後利用FormsAuthentication類別執行登入及登出,並利用this.Context.User.Identity.Name屬性取得登入使用者的名稱

詳細步驟:
  1. 於web.config中<system.web>區塊加入下面設定以宣告網站驗證方式為表單驗證且不允許匿名存取(除了登入頁)
    <authentication mode="Forms" >
    <forms name=".ASPXFORMSAUTH" loginUrl="login.aspx" />
    </authentication>
    <authorization>
    <deny users="?"/>
    </authorization>
  2. 於login.aspx放置輸入帳號及密碼的方塊及送出按鈕
  3. 於login.aspx.cs的Page_Load()進行驗證,若驗證成功則呼叫FormsAuthentication.SetAuthCookie()將使用者名稱紀錄於cookie
  4. 判斷Request["ReturnUrl"]是否為null,若是null則導向到登入成功後的預設網頁,否則呼叫FormsAuthentication.RedirectFromLoginPage()導向回原本的網頁(通常為timeout造成cookie消失)
  5. 登出作法為呼叫FormsAuthentication.SignOut()
  6. 若使用SqlDataSource且需要於查詢語法取得登入使用者名稱作為where條件的值,則可於Selecting事件中撰寫下列程式
    e.Command.Parameters["@AssistantID"].Value = this.Context.User.Identity.Name;

註:若login.aspx內含圖片則會因為<deny users="?"/>的設定而無法顯示,或是有某些特定網頁或路徑需要另外設定允許匿名存取,則需在web.config放入一段如下的設定
<location path="GetNewPassword.aspx">
<system.web>
<authorization>
<allow users="?"/>
</authorization>
</system.web>
</location>

Entity Framework 建立新物件並儲存後馬上取得關聯資料

使用 CreateProxy 建立物件,不要直接 new var newmodel = _contextXXX.CreateProxy<yyy>(); ... _contextXXX.yyy.Add(newmodel); await _contextXXX.SaveC...