ReportViewer 中顯示的內容如何格式化成貨幣格式

今天在寫一個報表的時候要將統計後的值格式化為貨幣格式,原來只要在資料格(Cell)的屬性視窗(Property Window)中修改 Format 屬性為 C0 即可:

在資料格(Cell)的屬性視窗(Property Window)中修改 Format 屬性為 C0

輸出的格式如下:

輸出的格式

如果要輸出 NT$ 的格式,必須修改報表的 Language 屬性。首先,先在報表設計師(Report Designer)的空白處用滑鼠左鍵點一下,再按 F4 開啟屬性視窗(Property Window),找到 Language 屬性並選取其值到 Chinese (Taiwan) 即可。

修改報表的 Language 屬性為 Chinese (Taiwan)

套用 Language 屬性為 Chinese (Taiwan) 後的輸出格式如下:

套用 Language 屬性為 Chinese (Taiwan) 後的輸出格式

  

此文章由 will 發表於 2008/7/2 下午 09:40:46

永久連結 | 評論 (0) | 此文章的RSSRSS comment feed |

分類: SQL Server

標籤: ,

收藏:

ReportViewer 中統計的值如果為 null 自動補 0 的方法

我們在設計報表時,如果在做樞紐分析(Matrix)時會發現有些資料格因為沒有資料的關係會出現空白的方格:

我們在設計報表時,如果在做樞紐分析(Matrix)時會發現有些資料格因為沒有資料的關係會出現空白的方格

如果你希望這些空白自動補 0 的話,可以在 Detail 的地方使用 IIF 函數幫你補上數字。

原本的預設值如果是 =Sum(Fields!產品成交數.Value) 的話

=Sum(Fields!產品成交數.Value)

你可以修改成 =IIF(Sum(Fields!產品成交數.Value) is nothing,0,Sum(Fields!產品成交數.Value))

=IIF(Sum(Fields!產品成交數.Value) is nothing,0,Sum(Fields!產品成交數.Value))

另外附帶一提,在報表的內建函式文章中有提到:「除了內建函式之外,併入報表中的運算式也可以使用任何 Visual Basic 函式。」,所以其實你可以很彈性的在報表設計工具中做一些動態的運算。

相關連結

  

此文章由 will 發表於 2008/6/20 上午 11:15:54

永久連結 | 評論 (0) | 此文章的RSSRSS comment feed |

分類: SQL Server

標籤: ,

收藏:

ReportViewer 匯出 PDF 時,中文不會出現亂碼的方法

我們最近在開發 SQL Server 2005 的 Reporting Service 報表功能,而在使用 ReportViewer 查看報表時都沒問題:

ReportViewer 匯出 PDF 檔 

但是在執行匯出資料到 PDF 格式時,所有的中文字都會變成亂碼:

ReportViewer 執行匯出資料到 PDF 格式時,所有的中文字都會變成亂碼

若要解決這個問題其實還蠻容易的,只要修改報表定義檔( *.rdlc )中各物件的字型修改掉即可,預設來說預設的字型是 Tahoma,你必須改成 PMingLiU 即可。

而所有報表定義檔 ( *.rdlc ) 都是 XML 語法,你只要直接將以下標籤定義:

<FontFamily>Tahoma</FontFamily>

全部都換成以下 PMingLiU 這個定義就可以了,這個代碼是「細明體」的字型代號:

<FontFamily>PMingLiU</FontFamily>

如果你要設定的字型是「標楷體」的話,可以用以下定義:

<FontFamily>DFKai-SB</FontFamily>

如果是在中國大陸常用的「宋體」字型,我就不知道是什麼代碼了,也許知道的網友可以提供給我知道。

你可以使用任何編輯器來修改,例如說你可以使用 Notepad++ 一次開啟所有 *.rdlc 檔,然後用「取代所有開啟文件」的方式一次替換所有報表定義檔中的相關字串:

你可以使用 Notepad++ 一次開啟所有 *.rdlc 檔,然後用「取代所有開啟文件」的方式一次替換所有報表定義檔中的相關字串

這樣就可以省去用開發工具一個一個修改了。

  

此文章由 will 發表於 2008/6/19 下午 11:10:47

永久連結 | 評論 (0) | 此文章的RSSRSS comment feed |

分類: SQL Server

標籤: ,

收藏:

開發 ASP.NET 使用 SQL Server 2000 要注意權限是否足夠

我今天在使用 Visual Studio 2008 開發一個 ASP.NET 的專案,資料庫是用 SQL Server 2000 SP4,但是當我想進入除錯模式(F5)進行測試的時候,卻發生【EXECUTE 使用權限在物件 'sp_sdidebug',資料庫 'master',擁有者 'dbo' 上被拒絕。】的錯誤,如下圖:

EXECUTE 使用權限在物件 'sp_sdidebug',資料庫 'master',擁有者 'dbo' 上被拒絕。

英文的錯誤訊息是:

EXECUTE permission denied on object 'sp_sdidebug', database 'master', owner 'dbo'.

上網查了一下發現原來 SQL Server 2000 從 SP3 之後就改成「如果不是資料庫的擁有者,就無法除錯預儲程序(Stored Procedure)」,進而導致 VS2008 在進入除錯模式的時候會發生例外狀況(Exception)。

而我們通常在「開發時期」都是用 sa 帳戶或信任連線與 SQL Server 連接,所以之前從未遇過此問題,而這個案子是用「最小權限」的方式在開發,也就是在 web.config 中所設定的連線參數只能連接至專案的那個資料庫而已,所以才會出現這個錯誤。

相關連結

  

此文章由 will 發表於 2008/6/18 下午 08:52:14

永久連結 | 評論 (0) | 此文章的RSSRSS comment feed |

分類: ASP.NET | SQL Server

標籤: , ,

收藏:

ASP 使用 SQL Native Client 連結 SQL 2005 的注意事項

如果你真的逼不得已要用 ASP 透過 ADO 與 SQL Native Client 連接 SQL Server 2005 的話,在設定連線參數的地方一定要特別注意,否則會發生問題。

我有個朋友最近就發生這個問題,他使用 ASP 連接資料庫,但因為他的網站主機連接資料庫的 Driver 被改成 SQL Native Client 了,導致程式完全無法讀出欄位格式為 Text 或  NText 的欄位內容,網站的內容變成空白一片,且怎麼改程式都無法解決。

原來只要在連線參數的地方加上 DataTypeCompatibility=80 就可以解決問題了,如下:

Dim con As New ADODB.Connection

con.ConnectionString = "Provider=SQLNCLI;" _
         & "Server=(local);" _
         & "Database=AdventureWorks;" _ 
         & "Integrated Security=SSPI;" _
         & "DataTypeCompatibility=80;" _
         & "MARS Connection=True;"
con.Open
也許還有在寫 ASP 的人可以參考一下,因為這應該是資料庫升級到 SQL Server 2005 之後就一定會發生的問題。

相關連結

  

此文章由 will 發表於 2008/6/13 下午 01:37:11

永久連結 | 評論 (0) | 此文章的RSSRSS comment feed |

分類: SQL Server

標籤: , , ,

收藏:

查詢透過 Management Studio 的 GUI 所執行的 T-SQL 指令

透過 Management Studio 的 GUI 圖形介面操作的背後其實都是一堆 T-SQL 指令,但好像很少人知道如何將他實際執行的 T-SQL 取出來,其實是一個很簡單的技巧,但是卻很重要,例如說你要修改資料庫的表格或欄位名稱時,為了讓開發環境的資料庫結構(Schema)與正式主機環境的資料庫結構一致,你必須將你每次在開發環境變更的動作(T-SQL)儲存成「變更指令碼」(Changed Script),讓資料庫管理人員(DBA)可以在正式環境直接執行 T-SQL 就可以完成資料庫結構的變更,否則將會很容易造成開發主機與正式主機資料庫不一致的情況,我今天將告訴各位如何將 T-SQL 匯出成檔案或顯示在查詢視窗。

我想直接舉幾個例子並放幾張圖片大家就應該能夠舉一反三了。

新增資料庫

新增資料庫時,當資料庫各項屬性設定完成後,按下「指令碼」就可以將你這次要新增資料庫的動作新增至查詢視窗。

新增資料庫 

新增資料庫時,當資料庫各項屬性設定完成後,按下「指令碼」就可以將你這次要新增資料庫的動作新增至查詢視窗。

修改表格結構

在尚未修改任何欄位之前,這個「產生變更指令碼」的按鈕是 Disable 的。

在尚未修改任何欄位之前,這個「產生變更指令碼」的按鈕是 Disable 的

當修改了欄位或任何表格屬性後,這個「產生變更指令碼」的按鈕就會亮起來,直到按下「儲存」按鈕之前(或按 Ctrl + S)都會是亮的。

當修改了欄位或任何表格屬性後,這個「產生變更指令碼」的按鈕就會亮起來,直到按下「儲存」按鈕之前(或按 Ctrl + S)都會是亮的。

注意:千萬不要先儲存本次變更,因為只要儲存了之後,就無法匯出本次變更的「變更指令碼」了。

備份資料庫

備份、還原資料庫,或是卸離資料庫(Detach)、附加資料庫(Attach)都是可以的,且介面也都差不多。

備份資料庫

備份資料庫

我想三個例子已經夠了吧!以後大家如果想將一些日常的手動修改資料庫的動作寫成批次檔作業的話(例如說備份資料庫),就可以用今天這個技巧將 T-SQL 查出來,並且透過 sqlcmd.exe 工具執行即可。

相關連結

  

此文章由 will 發表於 2008/6/5 下午 09:50:05

永久連結 | 評論 (0) | 此文章的RSSRSS comment feed |

分類: SQL Server | Tips

標籤: , , ,

收藏:

推薦好用工具:Data Dictionary Creator

今天要介紹的工具是 Data Dictionary Creator (DDC),是一個簡單又實用的工具,他可以幫你的 SQL Server 中的資料庫每一個表格、欄位做註解,註解寫完之後是直接儲存在 SQL Server 中的「擴充屬性」中,然後可以直接輸出完整的資料庫結構說明文件(包括 Word, Excel, Xml, Html, T-SQL 等),如果覺得不夠還可以自己擴充,因為這軟體是在 CodePlex 上的一個開放原始碼專案。

Data Dictionary Creator 

大家應該都知道在設計 SQL Server 資料表的時候每個欄位都有個屬性叫做「描述」,可以說明該欄位是做什麼用的:

image

這個欄位的值其實是儲存在該欄位的「擴充屬性」裡,其屬性名稱是 MS_Description

這個欄位的值其實是儲存在該欄位的「擴充屬性」裡,其屬性名稱是 MS_Description

我曾經在之前也寫過一篇SQL Server Management Studio 表格設計技巧,建議各位可以去看看。

而 Data Dictionary Creator 就是靠著擴充屬性的自訂,將所有可註解的訊息全部紀錄在資料庫中,除了預設的 Description 欄位外,你還可以自訂其他的擴充屬性,讓你在 Document Database 頁籤的畫面中輸入。

例如說:你可以在 Advanced Settings 的 Document Additional Properties 輸入「UI 輸入說明」

在 Advanced Settings 的 Document Additional Properties 輸入「UI 輸入說明」

之後再進入 Document Database 頁籤就會馬上看到「UI 輸入說明」的欄位:

再進入 Document Database 頁籤就會馬上看到「UI 輸入說明」的欄位

最後再到 Export Documentation 就可以輸出文件:

到 Export Documentation 就可以輸出文件

之後你再選取你要輸出的格式即可:

選取你要輸出的格式

這樣你就可以立即獲得一份完整的資料庫表格欄位說明文件了,而且不用再維護「離線的文件」,任何資料庫欄位有變更,只要用這軟體編輯一下就可以匯出新的文件了,且最新資訊永遠留在資料庫中,真的是個很理想的文件撰寫模式。

除此之外,還可以將之前匯出的 XML 檔案手動編輯之後重新匯入資料庫,直接覆蓋掉現有資料庫中的擴充屬性。

可以將之前匯出的 XML 檔案手動編輯之後重新匯入資料庫,直接覆蓋掉現有資料庫中的擴充屬性

  

此文章由 will 發表於 2008/5/30 下午 07:05:17

永久連結 | 評論 (0) | 此文章的RSSRSS comment feed |

分類: SQL Server | 介紹好用工具

標籤:

收藏:

如何一次備份 SQL Server 中所有資料庫

以下是一次備份所有資料庫的懶人指令碼(T-SQL):

-- 取得資料庫本機的 Backup 資料目錄
DECLARE @backup_path nvarchar(256);
DECLARE @backup_file nvarchar(256);
SET @backup_path = (SELECT SUBSTRING(SUBSTRING(physical_name, 1, CHARINDEX(N'master.mdf', LOWER(physical_name)) - 1), 1, CHARINDEX(N'\DATA\', LOWER(physical_name)) - 1) + '\Backup\'
                  FROM master.sys.master_files
                  WHERE database_id = 1 AND file_id = 1);


-- 用來暫存備份指令的變數
declare @backup_sql nvarchar(max)
set @backup_sql = '';

-- 用來暫存資料庫名稱的變數
declare @dbname nvarchar(256)

-- 宣告 cursor 以取得資料庫名稱
declare icur cursor static for select name from sys.databases where name != 'tempdb'

OPEN icur

fetch next from icur into @dbname
while(@@FETCH_STATUS=0)
BEGIN
    set @backup_file = @backup_path + @dbname + '.bak'
    set @backup_sql  = 'BACKUP DATABASE ['+@dbname+']  TO DISK='''+@backup_file+''''

    exec (@backup_sql)

    FETCH NEXT FROM icur INTO @dbname
END

close icur
deallocate icur

備份完成的資料庫預設會擺在 C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Backup 目錄下。

  

此文章由 will 發表於 2008/5/1 上午 12:47:30

永久連結 | 評論 (0) | 此文章的RSSRSS comment feed |

分類: SQL Server

標籤: ,

收藏:

已安裝 SQLExpress SP2 但要改裝 SQL2005 的方法

今天第一次遇到 SQLExpress 中的資料庫大小超出限制的情況,主要是因為客戶要求所有上傳的檔案都要儲存在 SQL Server 中的緣故,所以資料庫的成長量十分驚人。

而當我想改裝 SQL Server 2005 Developer Edition 時想說連 Management Studio Express 也一併升級到 Management Studio 版本,雖然資料庫安裝十分順利,但安裝 Management Studio 時卻發生無法安裝的狀況,我嘗試將 Management Studio Express 解除安裝後還是無法正常安裝,他還是叫我移除一些東西,不過我實在想不出還要移除哪些程式,因為若是再移除就要移除資料庫了,就想說這應該不太對,我試了好幾次才試出來如何安裝成功。主要原因是因為安裝程式判斷出我現有的主機的用戶端元件是 Service Pack 2 的版本,而嘗試要安裝的工具卻是沒有 Service Pack 的版本(因為剛安裝當然沒有SP2),所以無法執行升級的程序。

要能成功改裝 Management Studio 首先必須到控制台的「新增或移除程式」找到 Microsoft SQL Server 2005 並點選「變更」,接著會出現「Microsoft SQL Server 2005 維護」視窗:

Microsoft SQL Server 2005 維護

選取「工作站元件」後按「下一步」幾次,直到以下畫面出現:

接著點選「變更安裝的元件」

接著點選「變更安裝的元件」並將「用戶端元件」全部移除

將「用戶端元件」全部移除

然後一直按下一步將安裝程式執行完就會將「用戶端元件」完整移除,這時再去安裝 Management Studio 就會安裝成功了。

相關連結

  

此文章由 will 發表於 2008/4/30 上午 12:14:14

永久連結 | 評論 (0) | 此文章的RSSRSS comment feed |

分類: SQL Server

標籤: ,

收藏: