2012年3月29日 星期四

Render RDLC on the fly

background將RDLC匯出成excel或pdf或word (vs2011)

public void renderRDL(string type, String rpath ,params ReportDataSource[] rds)
{
ReportViewer rv = new ReportViewer();
rv.LocalReport.ReportPath = rdlPath;
foreach (ReportDataSource rs in rds)
{
         rv.LocalReport.DataSources.Add(rs);
}
rv.ID = "myrpt";
string mimeType;
string encoding;
string fileNameExtension;
string deviceInfo = "";
Warning[] warnings;
string[] streams;
byte[] renderedBytes;
renderedBytes = rv.LocalReport.Render(type, deviceInfo,out mimeType, out encoding, out fileNameExtension, out streams, out warnings); HttpContext.Current.Response.Buffer = true; HttpContext.Current.Response.Clear(); HttpContext.Current.Response.ContentType = mimeType; HttpContext.Current.Response.HeaderEncoding = System.Text.Encoding.GetEncoding("big5"); //中文檔名時加此不會變亂碼HttpContext.Current.Response.AddHeader("content-disposition", "attachment; filename=我的表." + fileNameExtension); HttpContext.Current.Response.BinaryWrite(renderedBytes); HttpContext.Current.Response.End();
}
 }

2012年3月7日 星期三

Internet Explorer無法開啟這個網際網路網站。可能是因為要求的網站無法使用或找不到。請稍後再試

在開啟網站下的EXCEL檔時,出現無法存取檔案的訊息,訊息如下
.檔案名稱或路徑不存在
.這個檔案正被其他程式所使用中
.您要儲存的活頁簿名稱與現有開啟的活頁簿名稱相同

若儲存檔案則有Internet Explorer無法開啟這個網際網路網站。可能是因為要求的網站無法使用或找不到。請稍後再試。

最後發現是中文檔名的檔案在WINXP+IE8會有無法下載的問題,解決方法如下;
1.開啟IE瀏覽器,選擇「工具」-->「網際網路選項」
2.選「進階」頁籤,勾選「國際*」下的「傳送UTF-8 URL」
3.關掉所有IE再試一次

網路上有人是反勾選的做法, ANYWAY,都試看看吧...

目前遇過類似問題,除上述方法外,可能解決方法如下
1.如果網站有安裝urlscan,也請記得要C:\WINDOWS\system32\inetsrv\urlscan\UrlScan.ini下的 AllowHighBitCharacters 設定成 1 重新啟動 IIS.
2.若網站走IIS6.0  HTTPS,則確認該IIS檔案目錄,按右鍵內容,查看其自訂HTTP標頭下,是否有設定cache 

2013/02/23,
後來又遇到一個狀況,
IIS7.5 網站下的HTTP回應標頭加入Cache-Control,值為no-cache
結果網站中REPORT VIEWER 的RDL 皆無法進行匯出或列印
後來將 網站下的HTTP回應標頭加入Cache-Control改建立在需要的目錄下後即解決。

2012年3月4日 星期日

DIME 通訊協定錯誤: 不支援 '9' DIME 版本。只支援第 1 版

今天突然發現OLAP Server無法連結, 出現以下錯誤訊息.


Microsoft.AnalysisServices.Xmla.ResponseFormatException: DIME 通訊協定錯誤: 不支援 '9' DIME 版本。只支援第 1 版。   Microsoft.AnalysisServices.Xmla.DimeRecord.ReadHeader()   Microsoft.AnalysisServices.Xmla.DimeReader.ReadRecord()   Microsoft.AnalysisServices.Xmla.TcpStream.GetResponseDataType()   Microsoft.AnalysisServices.Xmla.CompressedStream.GetResponseDataType()   Microsoft.AnalysisServices.Xmla.XmlaClient.EndRequest()   Microsoft.AnalysisServices.Xmla.XmlaClient.Authenticate(ConnectionInfo connectionInfo, DateTime startTime)   Microsoft.AnalysisServices.Xmla.XmlaClient.OpenTcpConnection(ConnectionInfo connectionInfo)   Microsoft.AnalysisServices.Xmla.XmlaClient.Connect(ConnectionInfo connectionInfo, Boolean beginSession)   Microsoft.SqlServer.Management.Smo.Olap.SoapClient.Connect()   OlapEvent(SCH_STEP* pStep, SUBSYSTEM* pSubSystem, SUBSYSTEMPARAMS* pSubSystemParams, Boolean fQueryFlag).  步驟失敗。

 想了一下,日前把OLAP Port由預設的2383 改成了999, 所以連線時,在Server name要改成 servername:999.

只是這個錯誤真讓人摸不著頭緒,還以為是不是版本更新造成的呢!

HTTP OLAP 連線的安全性


原則上使用HTTP OLAP是採匿名使用者連線,可能有安全性的考量。
即使用者只要知道了HTTP OLAP的網址,即可透過OLAP BROWSER來連結OLAP.最簡單的工具像EXCEL本身就具有連線到Analysis Server的功能.


但如果走原先的OLAP連線,則使用者又必須是網域中的成員.才能連結OLAP Server.

在方便性的考量下, 我們採取了 HTTP OLAP + Custom Web Services + IIS IP 限制的做法.
即在WEB 專案建立一個OLAP Server資料讀取的的web services,依登入使用者配合客戶希望的權限控管原則進行角色權限的管制

然後在HTTP OLAP IIS 目錄,僅針對固定AP Server開放IP連線.


如此一來便可享受WEB 專案讀取OLAP Server的安全與便利.

這種做法應也適用OLAP Server與AP Server 或DB Server皆在同一台機器上,因為只需將IIS IP限定為本機即可避免外部機器使用HTTP OLAP連線.


以上做法實做後,運行一段時間,看來是可行的.

另一種做法則是保持使用原來的OLAP Server連線, 在WEB 專案建立一個Web Services,依登入使用者動態impersonate 已計劃好的網域帳戶權限來進行連線.

2012年3月1日 星期四

IGNORE_DUP_KEY = ON

含primary key資料表中,當有新增具重覆鍵資料時,都會有錯誤訊息,因而中斷了整批的交易

若想要自動忽略重覆鍵錯誤.可使用IGNORE_DUP_KEY = ON,如此仍可繼續寫入其餘交易資料忽略此錯誤

用到的情境不多,多虧同事無意間的測試看到這個參數...


--重建資料表
CREATE TABLE dbo.PurchaseOrderDetail
(
    PurchaseOrderID int NOT NULL
        REFERENCES Purchasing.PurchaseOrderHeader(PurchaseOrderID),
    LineNumber smallint NOT NULL,
    ProductID int NULL 
        REFERENCES Production.Product(ProductID),
    UnitPrice money NULL,
    OrderQty smallint NULL,
    ReceivedQty float NULL,
    RejectedQty float NULL,
    DueDate datetime NULL,
    rowguid uniqueidentifier ROWGUIDCOL  NOT NULL
        CONSTRAINT DF_PurchaseOrderDetail_rowguid DEFAULT (newid()),
    ModifiedDate datetime NOT NULL 
        CONSTRAINT DF_PurchaseOrderDetail_ModifiedDate DEFAULT (getdate()),
    LineTotal  AS ((UnitPrice*OrderQty)),
    StockedQty  AS ((ReceivedQty-RejectedQty)),
    CONSTRAINT PK_PurchaseOrderDetail_PurchaseOrderID_LineNumber
               PRIMARY KEY CLUSTERED (PurchaseOrderID, LineNumber)
               WITH (IGNORE_DUP_KEY = OFF)
) 
ON PRIMARY;



--修改索引
USE AdventureWorks2008R2;
GO
ALTER INDEX AK_SalesOrderHeader_SalesOrderNumber ON
    Sales.SalesOrderHeader
SET (
    STATISTICS_NORECOMPUTE = ON,
    IGNORE_DUP_KEY = ON,
    ALLOW_PAGE_LOCKS = ON
    ) ;
GO


參考MSDN上的說明
create table
alter index

publish error allowDefinition='MachineToApplication'

一個老舊的aspx web form專案,調了一些功能建置成功,但進行部署時顯示以下錯誤。 在應用程式層級之外使用註冊為 allowDefinition='MachineToApplication' 的區段發生錯誤。錯誤的原因可能是虛擬目錄尚未在 IIS 中設定為...