星期三, 7月 16, 2014

Windows Server 2012 使用 ASP.NET

Windows Server 2012 真的很討厭,很多介面或設定都跟以前不一樣了,

我只是想測試一下 IIS 8.0+ASP.Net 有沒有使用上的問題,就花了不少時間,

首先,安裝 .Net Framework 3.5 只能從添加角色和功能進行安裝就算了, 

還要修改光碟的路徑才行,不然就會連到 Windows Update 安裝,耗時費工, 

還好後來在網路上還是找到方法了,

 

指定備用源路徑:設定為 光碟槽:\SOURCES\Sxs\,就可以了

本以為這樣就結束了,

結果 IIS 架好,系統也都 Copy 過去後,打開網頁出現 Error,一看錯誤,

原來是 IIS 不認識 aspx,這個簡單,我知道,重新註冊就行了,於是我打開了 cmd,

切換目錄後輸入 aspnet_regiis -i ,沒想到出現了 Windows Server 2012 不支援這種方式,
















請到角色與功能中移除重新安裝,天曉得,移除後 Windows 就掛掉了,更別提安裝了,

只好重灌,以及上網找資料了,才知道,不只是 ASP.NET 跟 IIS 要安裝,

還有其他角色要安裝才能用,

















如此一來,就一切正常了。


參考:http://www.dotblogs.com.tw/regionbbs/archive/2012/09/13/installing.net.framework.3.5.on.windows.server.2012.aspx
http://blog.darkthread.net/post-2013-11-29-iis8-asp-net-setup.aspx


星期三, 7月 02, 2014

AlwaysOn 設定相同 SQL 帳號

SQL Server 的 AlwaysOn 在 MSDN 跟上課聽到的內容都是使用網域帳號在登入及演練,但是這並不實際,因為根本不可能讓程式也用網域帳號呀。

只好想辦法在兩邊都建立一樣的 SQL 帳號,測試結果不行,移轉的後帳號還是不能用,後來才發現,原來建立算是不同的帳號,要想辦法建立具有相同 SID 和密碼的 SQL 驗證登入帳戶才行。

現在第一台建立好帳號 UserName
SELECT SUSER_SID('UserName') as SID,
LOGINPROPERTY('UserName','PasswordHash') as Password
這樣可以查出 UserName 的 SID 跟 Password 之後,再去第二台建立帳號
CREATE LOGIN [UserName] WITH 
PASSWORD = 0x02004E8321B1C292991E5B4CF64E3983B3736C59567C2736910F3E0B17BCEF6DFE0BB37AE03A6FAA9CEB3AC2BB1DE290C08710B25C0DD78D708532D54B2888A590BB2BE4200E HASHED, 
SID = 0x849A0DE6AEF87147BF0588C621CE91AF, 
DEFAULT_DATABASE = [master], CHECK_POLICY = OFF, CHECK_EXPIRATION = OFF

這樣就算 AlwaysOn 切換機器,同一個 SQL 帳號也一樣可以使用了


參考:http://www.dotblogs.com.tw/jamesfu/archive/2012/07/19/syncaccount.aspx

星期四, 6月 05, 2014

Excel 合併多個檔案的 Sheet 1 到一個檔案中

最近在進行 Excel 檔導入資料,沒想到程式開發好了之後,廠商竟然是把資料分開提供,一百多個檔案,不可能每個月都分成一百多次進行導入,於是就想起了用VBA來整理成一個檔案了

分成一百多個檔案,是整我嗎?

打開 Excel 之後,用 Alt+F11 開啟 vba 編輯器,接著點選 "插入" 新增 "模組"

接著在模組中貼上 VBA 之後點選 F5 開始執行,就會把資料都整理在這個 Excel 第一個 Sheet 了

Sub simpleXlsMerger()  
  Dim bookList As Workbook  
  Dim mergeObj As Object, dirObj As Object, filesObj As Object, everyObj As Object  
  Application.ScreenUpdating = False  
  Set mergeObj = CreateObject("Scripting.FileSystemObject")  
  'change folder path of excel files here  
  Set dirObj = mergeObj.Getfolder("D:\Excels\")  
  Set filesObj = dirObj.Files  
  For Each everyObj In filesObj  
    Set bookList = Workbooks.Open(everyObj, UpdateLinks:=False, ReadOnly:=True)  
    ActiveSheet.AutoFilterMode = False  
    bookList.Worksheets("Sheet1").Select  
    bookList.Worksheets("Sheet1").AutoFilterMode = False  
    'change "A2" with cell reference of start point for every files here  
    'for example "B3:IV" to merge all files start from columns B and rows 3  
    'If you're files using more than IV column, change it to the latest column  
    'Also change "A" column on "A65536" to the same column as start point  
    Range("A2:IV" & Range("A65536").End(xlUp).Row).Copy  
    ThisWorkbook.Worksheets(1).Activate  
    'Do not change the following column. It's not the same column as above  
    Range("A65536").End(xlUp).Offset(1, 0).PasteSpecial  
    Application.CutCopyMode = False  
    bookList.Close False  
  Next  
  End Sub  
新增一種只抓取特定行並且貼上值,避免原本的資料是公式,

  Sub simpleXlsMerger()  
  Dim bookList As Workbook  
  Dim mergeObj As Object, dirObj As Object, filesObj As Object, everyObj As Object  
  Application.ScreenUpdating = False  
  Set mergeObj = CreateObject("Scripting.FileSystemObject")  
  '修改Excel檔的所在資料夾  
  Set dirObj = mergeObj.Getfolder("D:\Excels\")  
  Set filesObj = dirObj.Files  
  For Each everyObj In filesObj  
    Set bookList = Workbooks.Open(everyObj, UpdateLinks:=False, ReadOnly:=True)  
    ActiveSheet.AutoFilterMode = False  
    bookList.Worksheets("Sheet2").Select  
    bookList.Worksheets("Sheet2").AutoFilterMode = False  
    '我只要這個範圍的資料  
    Range("A4:L4").Copy  
    ThisWorkbook.Worksheets(1).Activate  
    'Do not change the following column. It's not the same column as above  
    Range("A65536").End(xlUp).Offset(1, 0).PasteSpecial Paste:=xlPasteValues  
    Application.CutCopyMode = False  
    bookList.Close False  
  Next  
  End Sub  

星期三, 6月 04, 2014

DualListBox 製作

最近要用到權限設定的左右兩個 ListBox 來左右點選,本來想說這種範例在網路上一定很多,不想自己寫了,沒想到網路上找了一堆都沒有用,還有一堆不能用的程式碼在簡體中文的網頁一直被重複的轉載,反正他們寫的我不能用,只好自己來了

期待做出來的樣子如下圖


透過 VS 2012 要拉出來很簡單

而cs的部份就在 Button 的 Click 事件就是我找到一堆不能用的程式碼,最後我這樣做就行了
protected void btnL2R_Click(object sender, EventArgs e)
{
 //先把選中的都放到右邊去
        foreach (int i in LeftListBox.GetSelectedIndices())
        {
                LeftListBox.Items[i].Selected = false;
                RightListBox.Items.Add(LeftListBox.Items[i]);
        }

        //在從右邊將左邊的刪除
        foreach (ListItem li in RightListBox.Items)
        {
         LeftListBox.Items.Remove(li);
        }
}

protected void btnR2L_Click(object sender, EventArgs e)
{
 //先把選中的都放到左邊去
        foreach (int i in RightListBox.GetSelectedIndices())
        {
                RightListBox.Items[i].Selected = false;
                LeftListBox.Items.Add(RightListBox.Items[i]);
        }

        //在從左邊將右邊的刪除
        foreach (ListItem li in LeftListBox.Items)
        {
                RightListBox.Items.Remove(li);
        }
}

星期二, 5月 20, 2014

SQL 縱向合併多欄位成一欄位

最近遇到不少資料庫不是我設計,但是我要維護頁面,而在資料庫的部份已經無法在更動了,即便正規化做的不好,反正只要大家都知道就好,不直觀也無所謂,

要來實作一個維護頁面,資料表如下,


這種樣子是很難閱讀,馬上看出各張 FormID 的權限,下面這種整理過的資料在呈現上也比較好閱讀,


本來以為要把資料全部丟到程式中去執行了,沒想到上網 Google 了一下就早到 SQL 就可以辦到了,


SELECT a.[FormID] ,left(a.[Authority],LEN(a.[Authority])-1) AS [Description] FROM
(SELECT [FormID],(SELECT CAST([AuthType] AS NVARCHAR ) + ',' FROM [FormAuth]
WHERE [FormId] = o.[FormId]
FOR XML PATH('')) AS [Authority]
FROM [FormAuth] o
GROUP BY [FormID]) a
ORDER BY [FormID]

省時又省力了

參考: http://weisnote.blogspot.tw/2012/12/t-sql.html

星期五, 5月 16, 2014

SQL Where 子句的 Like 使用 Under Line

最近要來抓每個 Table 的資料進行整理,

資料庫中有很多 Table 都是備份的,這一堆都不需要抓出來,

好在這些 Table 的名稱都有使用到 _ 來跟原本的 Table 作為識別,

所以本來想使用 SELECT [name] FROM sys.tables WHERE [name] NOT LIKE '%_%'

來選出 Table,結果這個 Where 有跟沒有一樣

後來找了好久才知道 SELECT [name] FROM sys.tables WHERE [name] NOT LIKE '%[_]%' 

要這樣用才能呀,原來 Under Line 是特殊字元,所以要特別處理。

星期一, 1月 27, 2014

SQL Server 2012 新增 Link Server SQL Server 2000

SQL Server 2012 已經沒有辦法直接在連結的伺服器中新增 SQL Server 2000 了,會出現下面這個討厭的錯誤。

 這時候就想到用 ODBC 來處理,果然上網找了一下就有資料了,趕緊動手設定
 先在 ODBC 中建立連線
 名字跟伺服器都自己填吧









星期一, 1月 13, 2014

SQL Server 2012 更新後造成無法導出 EXCEL


自從更新 VS 2012 的 SSIS 的套件之後,SSMS 突然就變成無法 Excel 匯出了,只要使用在匯出資料中使用 SQL 語法篩選資料就會出現 200 跟 202 這種奇怪的資料格式,然後就不能匯出了,Google 查看了一下就發現看起來像是更新造成的災難,

http://social.msdn.microsoft.com/Forums/sqlserver/en-US/97ff1f01-c02a-4c9a-b867-8eaecc464cfb/2012-sp1-no-longer-recognizes-common-data-types?forum=sqlintegrationservices

只好自己去修改一下 XML

修改一下這個檔案
C:\Program Files (x86)\Microsoft SQL Server\110\DTS\MappingFiles\MSSQLToSSIS10.XML

加入之後重新開啟 SSMS 就可以使用了
 <!-- varchar -->
 <dtm:DataTypeMapping >
  <dtm:SourceDataType>
   <dtm:DataTypeName>varchar</dtm:DataTypeName>
  </dtm:SourceDataType>
  <dtm:DestinationDataType>
   <dtm:CharacterStringType>
    <dtm:DataTypeName>DT_STR</dtm:DataTypeName>
    <dtm:UseSourceLength/>
   </dtm:CharacterStringType>
  </dtm:DestinationDataType>
 </dtm:DataTypeMapping>
 <dtm:DataTypeMapping >
  <dtm:SourceDataType>
   <dtm:DataTypeName>200</dtm:DataTypeName>
  </dtm:SourceDataType>
  <dtm:DestinationDataType>
   <dtm:CharacterStringType>
    <dtm:DataTypeName>DT_STR</dtm:DataTypeName>
    <dtm:UseSourceLength/>
   </dtm:CharacterStringType>
  </dtm:DestinationDataType>
 </dtm:DataTypeMapping>

 <!-- nvarchar -->
 <dtm:DataTypeMapping >
  <dtm:SourceDataType>
   <dtm:DataTypeName>nvarchar</dtm:DataTypeName>
  </dtm:SourceDataType>
  <dtm:DestinationDataType>
   <dtm:CharacterStringType>
    <dtm:DataTypeName>DT_WSTR</dtm:DataTypeName>
    <dtm:UseSourceLength/>
   </dtm:CharacterStringType>
  </dtm:DestinationDataType>
 </dtm:DataTypeMapping> 
 <dtm:DataTypeMapping >
  <dtm:SourceDataType>
   <dtm:DataTypeName>202</dtm:DataTypeName>
  </dtm:SourceDataType>
  <dtm:DestinationDataType>
   <dtm:CharacterStringType>
    <dtm:DataTypeName>DT_WSTR</dtm:DataTypeName>
    <dtm:UseSourceLength/>
   </dtm:CharacterStringType>
  </dtm:DestinationDataType>
 </dtm:DataTypeMapping> 

星期二, 11月 12, 2013

ObjectDataSource 與 GridView 的使用

每次寫新的頁面的時候,總是會忘記先將沒有資料的GridView隱藏起來,就會出現下面這種奇怪的錯誤,總是要找了好久才會發現,因為ObjectDataSource所引起的錯誤,在沒有任何參數與回傳的情形下,要先把這兩個物件都隱藏起來,這樣頁面才能正常使用呀


SQL Server Ole Automation Procedures無法使用

來源:http://msdn.microsoft.com/zh-tw/library/ms191188(v=sql.110).aspx

每次重新安裝 Database 後都會需要修改這個設定,因為前人使用的發信會有下面的錯誤

SQL Server 阻止了对组件“Ole Automation Procedures”的 过程“sys.sp_OACreate”的访问,因为此组件已作为此服务器安全配置的一部分而被关闭。系统管理员可以通过使用 sp_configure 启用“Ole Automation Procedures”。有关启用“Ole Automation Procedures”的详细信息,请搜索 SQL Server 联机丛书中的“Ole Automation Procedures”。


只要啟用就行了,從不知道什麼版本之後預設就是未啟用

 sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'Ole Automation Procedures', 1;
GO
RECONFIGURE;
GO