在開發 asp.net 的專案時,常常被客戶要求將資料匯出成 Excel 檔案。
因此,Study 了許多 Excel 的產生方法。
陳述如下:
- 產生 CSV格式
- 利用GridView Control
- 利用 OleDb
- VSTO
- Xml 格式的 Excel 檔
- OpenXmlSDK
- Microsoft ReportViewer 匯出 Excel
- Crystal ReportViewer 匯出 Excel
關於各個方法的優缺點,可見投影片
在開發 asp.net 的專案時,常常被客戶要求將資料匯出成 Excel 檔案。
因此,Study 了許多 Excel 的產生方法。
陳述如下:
關於各個方法的優缺點,可見投影片
今天試了 sql server 2008 的 table value parameter,似乎還不錯,省下了不少的功夫
首先要在資料庫寫如下的 script
use tempdb; create type t_tvptable as table (i int) create table t ( a int) go create proc usp_tvpinsert(@p t_tvptable readonly) as insert t select * from @p go
然後,寫一個 Console application (with VS2008)
using System.Data; using System.Data.SqlClient; using System.Diagnostics; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { SqlConnection c = new SqlConnection("data source=sql2008rc0;user id=sa; password=pwd;database=tempdb"); SqlCommand cmd = c.CreateCommand(); cmd.CommandText = "usp_tvpinsert"; cmd.CommandType = System.Data.CommandType.StoredProcedure; SqlParameter p = cmd.Parameters.Add("p", System.Data.SqlDbType.Structured); Stopwatch sw = new Stopwatch(); sw.Start(); DataTable t = new DataTable("temp"); t.Columns.Add("a", typeof(int)); for (int i = 0; i < 100000; i++) t.Rows.Add(i); p.Value = t; sw.Stop(); System.Console.WriteLine(sw.ElapsedMilliseconds.ToString()); sw.Start(); c.Open(); cmd.ExecuteNonQuery(); c.Close(); sw.Stop(); System.Console.WriteLine(sw.ElapsedMilliseconds.ToString()); } } }
這樣一來,一次就可以新增多筆資料了,而且是以 datatable 來傳入參數的。
以 SQL Server profiler 錄出來的結果如下
declare @p1 dbo.t_tvptable insert into @p1 values(0) insert into @p1 values(1) insert into @p1 values(2) insert into @p1 values(3) insert into @p1 values(4) ..... insert into @p1 values(99998) insert into @p1 values(99999) exec usp_tvpinsert @p=@p1
而且,效能當然超好了。因為此段 sql 並而由 client side 產生的,因此 sql server 不必花時間 parse 且為此 script 製作 execution plan。
Code download
在設計測試劇本(testing scenario) 時,常常會發現到與需求分析時差不多。
那到底差在哪裡呢?
其實主要的差別是:兩者都使用相同的資訊(即使用者需求,User Requirement),但用法不同。
需求分析/系統設計 | 測試劇本 |
需求分析人員想要找出 System Scope,並固定其範圍,以利建置系統。 | 測試人員利用User Requirement找出未來系統可能的問題。 |
需求分析人員需提出系統的建議方案。例如是否要用 Windows Form 或 Web Form。 其實這個應該在System Design 才提出來,但通常在 RFP 時就被規定了。 | 測試人員不需要真的了解系統是如何運作的。甚至也不必提出建議。測試人員需要站在使用者的角度來測試這個系統。 |
系統設計人員需要作設計的取捨。 | 測試人員不必作設計的取捨。相反地,測試人員需要將這個設計的影響表達出來。 |
需求分析時的需求必須詳盡。 | 測試的劇本不必詳盡,只要有效/有用即可。 |
需求分析人員常常受限於使用者的需求。不必(也通常不能)自行提出更棒的需求/設計方案。 | 測試人員的目的,是站在stake holder 的角度,測試此系統的能力。故不必受限於使用者提出的需求。 |
最近才發現這個寫 blog 的工具。並且因此又回到 http://bccharles.spaces.live.com/default.aspx 開始寫 blog。
現在又試用 windows live writer 寫 google 的 blog。可以寫嗎?
而且,可以多個照片嗎?例如
渴望的眼神
南極的企鵝