2016年3月16日 星期三

MS SQL Server 讀取 AD 資料

MS SQL Server 讀取 AD 方式有二
1.OPENROWSET
2.Linked Server + OPENQUERY

[OPENROWSET]
Step1 開啟 OPENROWSET 功能(已開啟則省略)
--開啟進階選項 1:開啟 / 0:關閉
sp_configure 'show advanced options',1
reconfigure

--開啟openrowset功能 1:開啟 / 0:關閉
sp_configure 'Ad Hoc Distributed Queries',1
reconfigure

Step2 T-SQL
   [Account] : domain\account, ex. ABC\John
   [Password] : account password
   [Domain] : domain name, ex. ABC.com
   ※LDAP必須大寫
select * from openrowset(
   'ADsDSOObject' --Provider
   ,'';'[Account]';'[Password]' --Data Source;DomainAccount;Password
   ,'select sn,givenname,mail from ''LDAP://[Domain]'' where sn=''*'' '
)

常用 AD 欄位
欄位名說明欄位名說明
samaccountnameAD帳號mailEmail
givenname名字sn姓氏
displaynameFullname (姓+名)company公司
department部門location位置
title職稱請參考
LDAP Properties for CSVDE and VBScript

LDAP查詢語法請參考LDAP 查詢基礎

[OPENQUERY]
Step1 新增Linked Server
   提供者 : OLE DB Provider for Microsoft Directory Services
   產品名稱 : 隨便
   資料來源 : domain name, ex. ABC.com


Step2 安全性設定
   遠端登入 : domain\account, ex. ABC\John
   指定密碼 : account password


Step3 T-SQL
select * from openquery(ADSI
   ,'select sn,givenname,mail from ''LDAP://[Domain]'' where sn=''*'' '
)

附註 :
   1. SQL Server 2005 最多只能抓到 1000 筆 AD 資料
   2. SQL Server 2008 R2 最多只能抓到 901 筆 AD 資料
   3. SQL Server 2012 最多只能抓到 901 筆 AD 資料

2014年1月15日 星期三

ASP.NET Menu.SelectedItem 只會抓到第一個 ChildItem ?!

最近在測動態產生 Menu
MenuItem 全部手動加入 (Menu.Items.Add / Menu.Items[index].ChildItems.Add)

在 MenuItemClick event 要顯示所點選的 MenuItem.Text 時
卻發生永遠只會顯示第一個 ChildItem 的現象

最後才發現
Menu.SelectedItem 應該是透過 Menu.SelectedValue 去比對其下的 MenuItem.Value
來找出該 MenuItem

因為我將所有 MenuItem.Value 都設為相同值
所以 Menu.SelectedItem 抓出來的永遠都是第一個 ChildItem 了

2014年1月14日 星期二

jQuery.ajax 傳遞中文變亂碼

今天用 2 支 asp 測試 jQuery.ajax 傳遞中文
就出現亂碼問題
在這記錄一下
架構是 a.asp 透過 jQuery.ajax 呼叫 b.asp

a.asp
<html>
   <head>
      <meta HTTP-EQUIV="Content Type" CONTENT="text/html; charset=big5">
      <script src="http://codeorigin.jquery.com/jquery-1.10.2.min.js"></script>
      <script>
         $(function(){
            $("#btnSend").on("click",function(){
               $.ajax({
                  async:false,
                  type:"POST",
                  data:{name : $("#tInput").val()},
                  dataType:"text",
                  url:"b.asp",
                  success:function(msg){$("#sMessage").text(msg);},
                  error:function(xhr,status,thrown){alert(thrown);}
               });
            });
         });
      </script>
   </head>
   <body>
      <input type="text" id="tInput">
      <input type="button" id="btnSend" value="Send"><br>
      <span id="sMessage"></span>
   </body>
</html>

b.asp
<%=request.form("name") & " 您好~" %>

在 tInput 中輸入 "某甲"
結果 span 中顯示 "?�甲 �z�n~" 的亂碼

查了一堆資料
才知道原來 jQuery.ajax 預設會將 data 以 utf-8 方式編碼後送出
(contentType 預設為 "application/x-www-form-urlencoded; charset=UTF-8"
 詳見 : jQuery)

所以只要在 b.asp 加入一行 <%session.codepage=65001%>
即可解決亂碼問題
<%session.codepage=65001%>
<%=request.form("name") & " 您好~" %>

關於 session.codepage 的詳細說明請見 : 藍色小舖 (#3老頑童大大的說明)