2011年2月15日 星期二

ASP.NET 3.5 + Crystal Report

狀況一:系統找不到指定的檔案。
錯誤訊息:在指定dataset 給CrystalReportSource1 的這一行

Me.CrystalReportSource1.ReportDocument.SetDataSource(ds)



我應該最近寫程式有點鬼打牆了,明明就這樣寫就好,怎麼一直在那邊轉圈圈啊!! 哈哈哈

目前整理出的寫法:
先在頁面上放一個CrystalReportViewer1,就可以開始寫了,但我不知道crystalreportSource該怎麼用。

Dim sCN0 As String = "資料庫連線字串"
Dim commandText As String = "資料庫查詢語法"
Dim da As SqlDataAdapter = New SqlDataAdapter(commandText, sCN0)

 '建立一個 DataSet 物件。如果要塞入一個實體的dataset ,名稱一定要打對喔!!
' 例如我新增的一個叫做dsReport的dataset,它的datatable叫做dt_rpt
 Dim ds As dsReport = New dsReport()
 da.Fill(ds, "dt_rpt")

' 這個crystal report的路徑要注意,如果你的程式是放在資料夾下的話,它會認為你的crystalReport也是在同個路徑喔!!
'所以記得放對地方
'我記得我在寫windows form 的時候不用指定路徑啦,但不知道為什麼asp.net要
 Dim rptFile = Server.MapPath("rpOrderRpt.rpt")
 Dim doc As New ReportDocument
 doc.Load(rptFile)

''將dataset指定為ReportDocument的setDatasource
 doc.SetDataSource(ds)
 Me.CrystalReportViewer1.ReportSource = doc






狀況二:
登入失敗。細目: crdb_adoplus : 並未將物件參考設定為物件的執行個體檔案 C:\DOCUME~1\chenyu\LOCALS~1\Temp\rpOrderRpt {BF7D59DE-BDB8-4F0E-9875-2B9470BDBEB6}.rpt 錯誤: 無法連接: 登入參數錯誤


這個問題的話,我知道為什麼,但不知道該怎麼改,
狀況二就是只要資料庫連線資料是寫在function裡,總之不跟程式同一個頁面的話,例如我把去資料庫抓資料的程式全部寫在GetReport.GetReportA的function裡傳回datatable,
然後在產生報表的程式把datatable傳回,這樣就會出現上面的錯誤訊息了,


DTA = GetReport.GetReportA(Me.txtFromDate.Text, Me.txtToDate.Text).Copy


不知道是什麼問題,我有試著把連線字串宣告的區域變大,不過似乎不是這個問題,
只好繼續找方法囉!
如果有試出來再發文囉!


2/16更新
狀況二已經試出來了,
跟什麼連線字串的宣告變數無關啦,之前確實推斷錯誤,
剛試出來的結果:
新建的dataset中無論是DataTable或是TableAdapter,名稱要與資料庫的tableName一樣,否則就會出現狀況二的錯誤訊息,
只要改成跟資料庫的tableName一樣,無論是DataTable或是TableAdapter都不會有問題,再者,資料表的欄位可以不用一樣也沒關係。


以上就是目前的解決方案,
但還是覺得不方便,我就是想跟資料庫的tableName不一樣不行嗎?呵呵
繼續測試囉,有新發現再po上來喔!!


2/17更新
狀況三:
Crystal Report頁面按下一頁或是匯出報表都會出現像狀況二那樣的問題。


因為按下一頁或是匯出,都是觸發page_load,
所以目前我是在page_load的時候,再呼叫一次產生報表的程式,這樣就可以了,
但還是覺得這個方法有點…不太好…所以想到再po上來囉!!






資料來源:自己測試及參考
http://social.msdn.microsoft.com/Forums/zh-TW/236/thread/83b8206d-c4b0-4f62-8725-365f5b7b1ebc
http://www.blueshop.com.tw/board/FUM20041006161839LRJ/BRD201102141042154LH.html

2011年2月10日 星期四

VS 2008 SP1連線遠端資料庫,發生錯誤訊息

使用vs 2008 sp1連線遠端資料庫時,(本機資料庫不會喔!)發生以下錯誤訊息


看了網路上的文章是說安裝下列檔案:
安裝如下連結檔案:
1. Microsoft SQL Server System CLR Types
    http://go.microsoft.com/fwlink/?LinkId=123721&clcid=0x409

2. Microsoft SQL Server 2008 Management Objects
    http://go.microsoft.com/fwlink/?LinkId=123708&clcid=0x409

3. Microsoft SQL Server 2008 Native Client
    http://go.microsoft.com/fwlink/?LinkId=123717&clcid=0x409


結果:我只安裝了2、3點的檔案就可以了囉!!
我想是第1點我在本機安裝資料庫時可能就有安裝了,所以就不用裝了。
但是可能因為我本機的資料庫是SQL SERVER 2005的版本,而是用VS 2008 SP1
開發,所以可能缺少2、3點SQL SERVER 2008的元件,
但沒有試過用VS 2008 SP1連SQL SERVER 2008看這樣還會不會出現問題,
這倒是可以試試看。


2/14 用vs 2008連SQL SERVER 2008的資料庫,確實不會出現上面的錯誤訊息,
所以上面的推斷應該是正確的喔!!

參考資料:http://tw.myblog.yahoo.com/carlo-blog/article?mid=705

2011年2月8日 星期二

AjaxControlToolkit 版本3.5,可能有問題啦???????????????

使用vs 2008開發AJAX,出現了下列的錯誤訊息:

錯誤: AjaxControlToolkit requires ASP.NET Ajax 4.0  scripts. Ensure the correct version of the scripts are referenced. If you are using an ASP.NET ScriptManager, switch to the ToolkitScriptManager in AjaxControlToolkit.dll.

想說是vs 2008,所以我使用的AjaxControlToolkit.dll的版本是 3.5.40412.0
但沒想到出現這樣的錯誤訊息,所以我就將AjaxControlToolkit.dll的版本降為 3.0.30930就可以用了,會是3.5的版本不穩定嗎?????????

資料來源:自己測試。

AJAX 錯誤訊息。「作業無法完成。無效的FORMATETC結構」

好久沒使用AJAX了,今天因為在修改一個系統,所以就想說用AJAX,將AJAX ToolKit的控制項拖拉到畫面也不行,在原始碼上放的話,結果竟然出現下列訊息:


最好只好「重設工具箱」,將AjaxControlToolkit.dll重新加入,就可以正常使用啦…真是奇怪呢?



資料來源:自己測試囉!!