2008年7月21日 星期一

產生 Excel 檔的方法

在開發 asp.net 的專案時,常常被客戶要求將資料匯出成 Excel 檔案。

因此,Study 了許多 Excel 的產生方法。
陳述如下:

  1. 產生 CSV格式
  2. 利用GridView Control
  3. 利用 OleDb
  4. VSTO
  5. Xml 格式的 Excel 檔
  6. OpenXmlSDK
  7. Microsoft ReportViewer 匯出 Excel
  8. Crystal ReportViewer 匯出 Excel

關於各個方法的優缺點,可見投影片

投影片見 這裡,範例程式見這裡

Blogger 中的 csharp code formatting

一直以來,無法對 blog 中的程式碼,作好看,好懂的格式化。 看到別人的 blog,實在是太漂亮了,想說我如何也有這樣子的 blog。 現在,我也有了。不過, live spaces 的那一個,又要被我冷落了。真對不起 MS 參考了 http://www.cnblogs.com/Jaypei/archive/2008/05/24/1206478.html 及 http://sharedderrick.blogspot.com/2007/12/blogger-syntaxhighlighter.html ,知道了有個 http://code.google.com/p/syntaxhighlighter/ 的存在。 現在,在我的 blog 中,也有好看的程式碼了

sql server 2008 的 table value parameter

今天試了 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

2008年5月21日 星期三

需求分析與設計測試劇本的差異

在設計測試劇本(testing scenario) 時,常常會發現到與需求分析時差不多。
那到底差在哪裡呢?

其實主要的差別是:兩者都使用相同的資訊(即使用者需求,User Requirement),但用法不同。

需求分析/系統設計 測試劇本
需求分析人員想要找出 System Scope,並固定其範圍,以利建置系統。 測試人員利用User Requirement找出未來系統可能的問題。
需求分析人員需提出系統的建議方案。例如是否要用 Windows Form 或 Web Form。
其實這個應該在System Design 才提出來,但通常在 RFP 時就被規定了。
測試人員不需要真的了解系統是如何運作的。甚至也不必提出建議。測試人員需要站在使用者的角度來測試這個系統。
系統設計人員需要作設計的取捨。 測試人員不必作設計的取捨。相反地,測試人員需要將這個設計的影響表達出來。
需求分析時的需求必須詳盡。 測試的劇本不必詳盡,只要有效/有用即可。
需求分析人員常常受限於使用者的需求。不必(也通常不能)自行提出更棒的需求/設計方案。 測試人員的目的,是站在stake holder 的角度,測試此系統的能力。故不必受限於使用者提出的需求。

2008年5月19日 星期一

Windows Live Writer

最近才發現這個寫  blog 的工具。並且因此又回到 http://bccharles.spaces.live.com/default.aspx 開始寫 blog。

現在又試用 windows live writer 寫 google 的 blog。可以寫嗎?
而且,可以多個照片嗎?例如

渴望的眼神

期粉的眼神

南極的企鵝

DSC00893

2008年5月7日 星期三

VSTS 之 load test 如何新增 network type

當使用 Team Tester Edition 來做壓力測試時,network type 只有預設的那幾種。 如何新增一個自訂的頻寬呢?例如 120kb/s 到 C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\Templates\LoadTest\Networks 看一看就知道了。

2008年5月6日 星期二

叫SQL Server 2005 還給我記憶體

SQL Server 資料庫一旦使用了 memory ,就不會還給作業系統了。有時候,這是不被資料庫管理員所允許。此時,需要重新開機嗎? 請在 SSMS 上,執行 --roll forward checkPoint --清除未被使用的 buffers dbcc dropCleanBuffers 這樣就暫時取得記憶體,可以執行其他的程式了。 不過,過不了多久,又會被 Sql cache 所用掉了吧

Share with Facebook