千萬要做的事
1. 網站使用 valid html 撰寫,最好過 w3c validator
原理:這是一定要的,原因如 part3。
2. 使用正確的 html 標記描述內容與網站的元素。該用 h1,h2, strong, p 的請不要客氣
原理:這是一定要的,原因如 part3。
3. 網頁敘述要含關鍵內容。關鍵字越前面越好。(但並非 abuse)
原理:可觀察 Google 的 SERP (Search Engine Result Page)
4. 網頁 title 要含關鍵字。關鍵字越前面越好。(但並非 abuse)
原理:可觀察 Google 的 SERP (Search Engine Result Page)
5. 網址要含關鍵字。WordPress 在這方面設計的相當好,只要你把選項打開就行了。至於其他的內容網站,你可以考慮在背景使用 Google Translate 將網址標題轉成英文然後 append 在網址上。
原理:可觀察 Google 的 SERP (Search Engine Result Page)
其中權重 5 > 4 > 3 。
6. 因為 3,4,5 的關係,生產內容時必須遵守 SEO 原則,程式設計上也必須做出搭配。請看 part3。
7. 圖片內容,請加 alt 描述這張圖片。但 alt 字數也別太誇張,否則會视為 cheating。如果這是選單或 banner,請用 ul, li 和 h1,h2 寫,再用 CSS 技巧換掉。別來個 img + a 做 banner 的設計,img 權重遠低於 h1。
原理: part3。
8. 把內容放在 Search Engine highly friendly 的平台,如果是你想在 Yahoo 取得高排名,請放 Wretch,如果你想在 Google 取得高排名,請放 Blogger.com。如果你是自己 hosting,請檢視你的平台是否有做到 checklist 上的要求。
原理: 搜尋引擎偏好自家產品,結果會出現在比較前面
9. 為網站生成符合標準的 sitemap.xml。並主動將結果送至 Google、Yahoo、Bing 等等。
原理:搜尋引擎仰賴自己設計的爬蟲去抓取內容,他們的 index 路徑是遵循著網站上的內部連結以及外部連結,至於沒有被連結到網頁,自然就不會被收錄。他們沒有通靈能力,自然不知道你有產出這樣的內容。你必須主動告知他們。另外,sitemap 可以標記內容在該站的權重以及內容更新時間。有效提供 Search Engine 運算依據。這一點非常重要,根據我曾經做過的實驗,某搜尋引擎有送 sitemap 跟沒送,排名結果差非常非常多。
10. 在高 PR 的網站為自己的網站帶來 inbound link。
原理:眾所諸知,Google 的演算法是 Page Rank 演算法。PR 演算法簡單的想法是:如果一個網站,越多網站甚至是超級大站都連結這個網站,那麼它必定是重要的。但切記千萬別 abuse。
11. 提昇網站效能,開啟速度要快。
原理:網站速度,也是搜尋引擎排名的考慮因素之一。
12. 使用 Google Webmaster Tool 檢視你的網站 SEO 成效。
原理:它真的很好用….
千萬不要做的事
1. 千萬不要濫用以上原則,搜尋引擎不是笨蛋,不會不知道你想作弊。適度的標記關鍵內容就能使你的排名大幅提昇。但是濫用會造成你被下架。
原理:常識。
2. 不要把主要內容放在 image/ js / flash/ iframe 內。
原理: bot 只吃該頁的 html,image / js/flash/iframe 對他們來說只是一行外部網址。它們不會知道這是內容
3. 不要在 a 裡面加 onclick / onmouseover 類似的屬性。
原理:這多半指稱這是 js link,搜尋引擎會跳過這個 a 內的內容。如果你要上計算人氣等功能,請用 Unobtrusive Javascript 技巧實作。如果你只是想要做 css hover 效果,那就更欠人罵了,可以用 CSS 寫的東西為何要放上 a 去破壞 SEO 效果。
4. 連結不要濫用 302 redirect。
原理:http response 的 301, 302 是有意義的。301 指的是永久性重導向,302 指的是暫時性重導向,但 RD 寫 code 往往沒有深究其意義。我曾經見過人氣系統用 302 設計先轉去人氣系統再跳回來。Epic Fail。302 對搜尋引擎來說是「完全不值得收錄」的內容,因為他是「暫時性網址」。如果網站全站都掛 302 連結,那……沒有搜尋引擎想要收錄超正常。
5. 標籤不要亂包。我曾經看過一行 html 是這樣寫的 <h1><a href="xxx"> abc </a><img src="def"/></h1> 。搜尋引擎不知道重要的是 abc 還是沒有 alt 的 def。最後是連 abc 都被視為不重要內容。
原理:你讓搜尋引擎精神錯亂。
6. 每一頁的 title 與 meta description 不要重複
原理:搜尋引擎很大的權重採用 title 與 meta description。如果一個網站 50 頁 + 的 title 和 meta description 都一樣。搜尋引擎不會知道哪一頁是真正的入口點,真正重要的內容。下場就是全部都不收錄!!!
7. meta keywords 不重要
原理:Google 不採用。Yahoo 採用。但權重不大。因為 meta keywords 曾經被大家濫用 …但如果你拿 meta keywords 來做 correct 字義的功能,是不錯的。
8. 不要用 Word 生內容和做網頁
原理: part3 Word 只會生一堆垃圾 html code 出來而已。
9. 不要用 PSD 自動轉 html 做版面
原理:拜託不要惡搞啊……這種 html 根本不能用
10. 檢查你的 robots.txt ,不要上線以後上面還是放了 disallow * ,再疑惑為什麼搜尋引擎沒有收錄
原理:廢話,你就叫搜尋引擎不要抓啊。最好這樣上面還會收錄你的內容。
11. 不要故意亂塞關鍵字,再用 css 技巧做 display :none
原理:搜尋引擎不是白痴。你這樣做的話會被視為作弊,列入黑名單。
分享 ASP,ASP.NET,VB,C#,程式開發,網站設計,部落格,微網誌,網路行銷,facebook 行銷,噗浪行銷,社群行銷,電腦硬體軟體,網路賺錢等資訊內容。『噗落格』裡的文章大多是從各網站摘錄(轉貼)下來的,僅提供研究及筆記之用途,如有侵權請留言告知!一開始不打算賺錢,一個不可能中的可能
2011年3月31日 星期四
2011年1月4日 星期二
軟體開發工程
一般軟體開發程序分為
需求整理==>系統分析==>系統設計==>程式開發==>系統測試==>系統維護
整個流程的控管稱為專案管理,所使用的標準稱為軟體標準,因為有了標準,我們才能將軟體各階段的程序與以量化,進而評估其價值與品質。以下針對各階段作一簡要描述:
1.需求整理:通常由了解市場需求或客戶為主要人員,其目的為整理未來軟體應具備之功能說明與要求(RFP)。此為所有軟體產品或專案成立時的第一要務,如果沒有完整的需求項目與功能說明及要求,之後各階段的開發也會因需求的變動而導致大量時間與成本的浪費。
2.系統分析:通常由具備專業知識(Domain Know How)之軟體人員擔任,其主要目的在於與提出需求者溝通協調,並將提出之需求,透過流程合理性加以整理成特定規格與表示方式來呈現,並與提出需求者確認,此階段常見之方式有UML 提出之Use Case、Use Case Diagram、Activity Diagram 等等,並且需提出系統所以功能及模組測試個案相關文件。
3.系統設計:通常由資深程式開發人員擔任,其具備資料庫/程式開發之專業知識與技術,此階段主要目的在於架構系統,將使用者分析資料轉述為程式流程,供程式開發人員參考並開發符合需求之系統功能。此階段為軟體開發最重要步驟,其介於使用者導向與系統導向之溝通橋樑,此階段常見之方式有UML 提出之Activity Diagram、Sequence Diagram、Table Definition 等等。
4.程式開發:由一般程式設計師擔任,此工作內容主要以系統設計定義的規範來實作,此人員完成之產物主要為程式原始碼,並且應自行完成所撰寫程式之基本測試,主要包括所有API之輸出輸入測試及確定所有程式碼均有執行到且無錯誤。
5.系統測試:通常由一般人員偕同系統分析師根據[功能及模組測試個案相關文件]進行測試,主要為驗證模組及流程之輸出入功能是否符合客戶需求,分為阿法測試及貝塔測試兩類,前者為開發人員進行之測試驗證,後者為確認無誤後交由User之驗證程序,此階段需使用錯誤處理機制詳加紀錄,主要用於確認測試之問題所屬之類型(ex. 程式bug 或 規格異動 或 畫面調整等)。
6.系統交付與上線:通常由系統分析與專案管理人員擔任,此階段通常為軟體或專案開發最難處理的階段,其原因在於使用者對系統的認知與時間誤差,導致無法明確掌握系統結案時程,此階段最需要的是溝通與協調以及問題處理的效率,因此具備善於溝通協調的系統分析人員與問題處理的程式設計師是能夠縮短此階段的時程,但現實環境卻是最難實行的,也因此成為所有軟體開發一大阻礙。
需求整理==>系統分析==>系統設計==>程式開發==>系統測試==>系統維護
整個流程的控管稱為專案管理,所使用的標準稱為軟體標準,因為有了標準,我們才能將軟體各階段的程序與以量化,進而評估其價值與品質。以下針對各階段作一簡要描述:
1.需求整理:通常由了解市場需求或客戶為主要人員,其目的為整理未來軟體應具備之功能說明與要求(RFP)。此為所有軟體產品或專案成立時的第一要務,如果沒有完整的需求項目與功能說明及要求,之後各階段的開發也會因需求的變動而導致大量時間與成本的浪費。
2.系統分析:通常由具備專業知識(Domain Know How)之軟體人員擔任,其主要目的在於與提出需求者溝通協調,並將提出之需求,透過流程合理性加以整理成特定規格與表示方式來呈現,並與提出需求者確認,此階段常見之方式有UML 提出之Use Case、Use Case Diagram、Activity Diagram 等等,並且需提出系統所以功能及模組測試個案相關文件。
3.系統設計:通常由資深程式開發人員擔任,其具備資料庫/程式開發之專業知識與技術,此階段主要目的在於架構系統,將使用者分析資料轉述為程式流程,供程式開發人員參考並開發符合需求之系統功能。此階段為軟體開發最重要步驟,其介於使用者導向與系統導向之溝通橋樑,此階段常見之方式有UML 提出之Activity Diagram、Sequence Diagram、Table Definition 等等。
4.程式開發:由一般程式設計師擔任,此工作內容主要以系統設計定義的規範來實作,此人員完成之產物主要為程式原始碼,並且應自行完成所撰寫程式之基本測試,主要包括所有API之輸出輸入測試及確定所有程式碼均有執行到且無錯誤。
5.系統測試:通常由一般人員偕同系統分析師根據[功能及模組測試個案相關文件]進行測試,主要為驗證模組及流程之輸出入功能是否符合客戶需求,分為阿法測試及貝塔測試兩類,前者為開發人員進行之測試驗證,後者為確認無誤後交由User之驗證程序,此階段需使用錯誤處理機制詳加紀錄,主要用於確認測試之問題所屬之類型(ex. 程式bug 或 規格異動 或 畫面調整等)。
6.系統交付與上線:通常由系統分析與專案管理人員擔任,此階段通常為軟體或專案開發最難處理的階段,其原因在於使用者對系統的認知與時間誤差,導致無法明確掌握系統結案時程,此階段最需要的是溝通與協調以及問題處理的效率,因此具備善於溝通協調的系統分析人員與問題處理的程式設計師是能夠縮短此階段的時程,但現實環境卻是最難實行的,也因此成為所有軟體開發一大阻礙。
專案人生─(6)專案團隊的組成類型
以下將「專案經理」的強弱和「專案成員」的強弱做為兩個維度,列出四種專案團隊的組合
(那些只出意見不做事的Sponsor或是高層主管,在此先略過不提)
A型團隊(經理弱,成員弱)
這是一般人最怕待到的專案團隊,也是老板的夢魘。如果不是搞不清楚狀況的話,通常是有特別原因才會推出這種組合去打仗。事情做不好,又做不完,大家累得要死又沒人鼓勵,專案經理報喜不報憂,這種團隊能完成專案的機率很低,大概低於50%。就算能結案,公司和專案成員大概也得遍體麟傷。
B型團隊(經理弱,成員強)
以西遊記團隊為例,相對於三位徒弟,除了佛法和緊箍咒之外,唐僧算是比較弱的一位成員;再以三國中的劉備團隊為例,論計謀用兵,劉備比不過孔明,要扁人開打,劉備又比不過關羽和張飛,但是劉備能夠讓團隊成員服從命令,共同為理想和目標而打拚,也是一種領導模式。這種團隊成功機率大於A型團隊,大概50%-75%之間。
C型團隊(經理強,成員弱)
以前面提過的江戶川柯南為例,每次解決案子,都是靠柯南一個人就搞定了,阿笠博士、小蘭、灰原哀、毛利小五郎….等人,不過是角色或輕或重的配角罷了。在這種團隊做事,好處是:專案經理無所不能,對外可搞定客戶及老板,對內可協助專案成員解決問題;壞處是:整個專案的credit很容易變成專案經理個人的credit,在他手底下要出頭天可能要等很久,因為沒有露臉的機會。這種團隊成功機率也大於A型團隊,大概50%-75%之間。
D型團隊(經理強,成員強)
這應該像是夢幻組合型的團隊了,在現實的職場生涯中,實在是可遇不可求。為什麼呢?如果真的有這麼強的團隊,一定會被老板拆成好幾個B型和C型團隊,這樣才有辦法應付較多的專案。再則,以中國人一山不容二虎的個性,要不了一兩年,成員就會有異動的心,想要自立門戶或更上一層樓(就像熱門樂團一個個單飛的主唱)。這種團隊成功機率最大,大概80%-90%之間。
說起來我很幸運,有看過D型團隊,專案經理的口頭禪是「我要成為海賊王!」,我還記得專案經理的名字,他叫「蒙其D魯夫」。
D型團隊另外一個代表是 "沉默的艦隊"
C型團隊假以時日是可以訓練成D型團隊的, 這種故事電影裡面很多的.
B型團隊如果頭兒管不住底下的成員, 就會向A型團隊靠攏.
A型團隊也有可能是實驗性質的團隊, 把一羣不知道該怎麼擺的人全部集中成一個Team, 做的好是公司賺到, 做不好的話是整個Team裁掉, 一羣人統統回家吃自己.
(那些只出意見不做事的Sponsor或是高層主管,在此先略過不提)
A型團隊(經理弱,成員弱)
這是一般人最怕待到的專案團隊,也是老板的夢魘。如果不是搞不清楚狀況的話,通常是有特別原因才會推出這種組合去打仗。事情做不好,又做不完,大家累得要死又沒人鼓勵,專案經理報喜不報憂,這種團隊能完成專案的機率很低,大概低於50%。就算能結案,公司和專案成員大概也得遍體麟傷。
B型團隊(經理弱,成員強)
以西遊記團隊為例,相對於三位徒弟,除了佛法和緊箍咒之外,唐僧算是比較弱的一位成員;再以三國中的劉備團隊為例,論計謀用兵,劉備比不過孔明,要扁人開打,劉備又比不過關羽和張飛,但是劉備能夠讓團隊成員服從命令,共同為理想和目標而打拚,也是一種領導模式。這種團隊成功機率大於A型團隊,大概50%-75%之間。
C型團隊(經理強,成員弱)
以前面提過的江戶川柯南為例,每次解決案子,都是靠柯南一個人就搞定了,阿笠博士、小蘭、灰原哀、毛利小五郎….等人,不過是角色或輕或重的配角罷了。在這種團隊做事,好處是:專案經理無所不能,對外可搞定客戶及老板,對內可協助專案成員解決問題;壞處是:整個專案的credit很容易變成專案經理個人的credit,在他手底下要出頭天可能要等很久,因為沒有露臉的機會。這種團隊成功機率也大於A型團隊,大概50%-75%之間。
D型團隊(經理強,成員強)
這應該像是夢幻組合型的團隊了,在現實的職場生涯中,實在是可遇不可求。為什麼呢?如果真的有這麼強的團隊,一定會被老板拆成好幾個B型和C型團隊,這樣才有辦法應付較多的專案。再則,以中國人一山不容二虎的個性,要不了一兩年,成員就會有異動的心,想要自立門戶或更上一層樓(就像熱門樂團一個個單飛的主唱)。這種團隊成功機率最大,大概80%-90%之間。
說起來我很幸運,有看過D型團隊,專案經理的口頭禪是「我要成為海賊王!」,我還記得專案經理的名字,他叫「蒙其D魯夫」。
D型團隊另外一個代表是 "沉默的艦隊"
C型團隊假以時日是可以訓練成D型團隊的, 這種故事電影裡面很多的.
B型團隊如果頭兒管不住底下的成員, 就會向A型團隊靠攏.
A型團隊也有可能是實驗性質的團隊, 把一羣不知道該怎麼擺的人全部集中成一個Team, 做的好是公司賺到, 做不好的話是整個Team裁掉, 一羣人統統回家吃自己.
2010年12月16日 星期四
[C#] 基本網路技術(二) IP 位址與主機名稱轉換
System.Net 命名空間
Dns 類別
System.Net.Sockets 命名空間
SocketException 類別
原文轉載自 http://www.dotblogs.com.tw/atowngit/archive/2010/01/16/13046.aspx
Dns 類別
System.Net.Sockets 命名空間
SocketException 類別
//引用命名空間
using System.Net;
using System.Net.Sockets;
namespace TestIPAddress {
class Program {
static void Main(string[] args) {
try {
GetIPAddress();
}
catch (SocketException SockEx) {
Console.WriteLine(SockEx.Message);
GetIPAddress();
}
Console.ReadKey();
}
static void GetIPAddress() {
Console.WriteLine("輸入所要解析的主機名稱 (ex: www.pchome.com.tw):");
//取得主機名稱
string pHostName = Console.ReadLine();
IPHostEntry myAddress = Dns.GetHostEntry(pHostName);
Console.WriteLine("{0} 所對應的 IP 位址如下 : ", pHostName);
IPAddress[] myIPAddress = myAddress.AddressList;
foreach (IPAddress add in myIPAddress)
Console.WriteLine(add);
Console.WriteLine("輸入所要解析的 IP 位址 :");
//取得 IP 位址
string pAddress = Console.ReadLine();
IPHostEntry myHostName = Dns.GetHostEntry(pAddress);
Console.WriteLine("{0} 所對應的 主機名稱 如下 : ", pAddress);
Console.WriteLine(myHostName.HostName.ToString());
}
}
}
原文轉載自 http://www.dotblogs.com.tw/atowngit/archive/2010/01/16/13046.aspx
[C#] 基本網路技術(一) 取得主機名稱與 IP
Dns 類別
Dns 成員
IPHostEntry 類別
轉載自原文 http://www.dotblogs.com.tw/atowngit/archive/2010/01/16/13045.aspx
Dns 成員
IPHostEntry 類別
using System;
using System.Net;
using System.Collections;
class HostName {
static void Main() {
string s = Dns.GetHostName();
Console.WriteLine("主機名稱 :{0} ", s);
IPAddress[] IPS = Dns.GetHostEntry(s).AddressList;
IEnumerator iEnums = IPS.GetEnumerator();
while (iEnums.MoveNext()) {
Console.WriteLine("IP : {0}", iEnums.Current.ToString());
}
Console.ReadKey();
}
}
轉載自原文 http://www.dotblogs.com.tw/atowngit/archive/2010/01/16/13045.aspx
[C#] 基本網路技術(三) 建立 TCP 連線
TcpClient 類別 : 提供 TCP 網路服務的用戶端連接。
TcpListener 類別 : 接聽來自 TCP 網路用戶端的連接。
NetworkStream 類別 : 提供網路存取之資料的基礎資料流。
sample1 Server 端應用程式
sample2 Client 端應用程式
轉載自 http://www.dotblogs.com.tw/atowngit/archive/2010/01/16/13047.aspx
TcpListener 類別 : 接聽來自 TCP 網路用戶端的連接。
NetworkStream 類別 : 提供網路存取之資料的基礎資料流。
sample1 Server 端應用程式
//匯入命名空間
using System.Net.Sockets;
namespace TestNetworkServer {
class Program {
static void Main(string[] args) {
System.Net.IPAddress theIPAddress;
//建立 IPAddress 物件(本機)
theIPAddress = System.Net.IPAddress.Parse("127.0.0.1");
//建立監聽物件
TcpListener myTcpListener = new TcpListener(theIPAddress, 36000);
//啟動監聽
myTcpListener.Start();
Console.WriteLine("通訊埠 36000 等待用戶端連線...... !!");
Socket mySocket = myTcpListener.AcceptSocket();
do {
try {
//偵測是否有來自用戶端的連線要求,若是
//用戶端請求連線成功,就會秀出訊息。
if (mySocket.Connected) {
int dataLength;
Console.WriteLine("連線成功 !!");
byte[] myBufferBytes = new byte[1000];
//取得用戶端寫入的資料
dataLength = mySocket.Receive(myBufferBytes);
Console.WriteLine("接收到的資料長度 {0} \n ", dataLength.ToString());
Console.WriteLine("取出用戶端寫入網路資料流的資料內容 :");
Console.WriteLine(Encoding.ASCII.GetString(myBufferBytes, 0, dataLength) + "\n");
Console.WriteLine("按下 [任意鍵] 將資料回傳至用戶端 !!");
Console.ReadLine();
//將接收到的資料回傳給用戶端
mySocket.Send(myBufferBytes, myBufferBytes.Length, 0);
}
}
catch (Exception e) {
Console.WriteLine(e.Message);
mySocket.Close();
break;
}
} while (true);
}
}
}
sample2 Client 端應用程式
using System.Net.Sockets;
namespace TestNetworkClient {
class Program {
//宣告網路資料流變數
NetworkStream myNetworkStream;
//宣告 Tcp 用戶端物件
TcpClient myTcpClient;
static void Main(string[] args) {
Program myNetworkClient = new Program();
Console.WriteLine("輸入連接機名稱 : ");
//取得主機名稱
string hostName = Console.ReadLine();
Console.WriteLine("輸入連接通訊埠 : ");
//取得連線 IP 位址
int connectPort = int.Parse(Console.ReadLine());
//建立 TcpClient 物件
myNetworkClient.myTcpClient = new TcpClient();
try {
//測試連線至遠端主機
myNetworkClient.myTcpClient.Connect(hostName, connectPort);
Console.WriteLine("連線成功 !!\n");
}
catch {
Console.WriteLine
("主機 {0} 通訊埠 {1} 無法連接 !!", hostName, connectPort);
return;
}
myNetworkClient.WriteData();
myNetworkClient.ReadData();
Console.ReadKey();
}
//寫入資料
void WriteData() {
String strTest = "this is a test string !!";
//將字串轉 byte 陣列,使用 ASCII 編碼
Byte[] myBytes = Encoding.ASCII.GetBytes(strTest);
Console.WriteLine("建立網路資料流 !!");
//建立網路資料流
myNetworkStream = myTcpClient.GetStream();
Console.WriteLine("將字串寫入資料流 !!");
//將字串寫入資料流
myNetworkStream.Write(myBytes, 0, myBytes.Length);
}
//讀取資料
void ReadData() {
Console.WriteLine("從網路資料流讀取資料 !!");
//從網路資料流讀取資料
int bufferSize = myTcpClient.ReceiveBufferSize;
byte[] myBufferBytes = new byte[bufferSize];
myNetworkStream.Read(myBufferBytes, 0, bufferSize);
//取得資料並且解碼文字
Console.WriteLine(Encoding.ASCII.GetString(myBufferBytes, 0, bufferSize));
}
}
}
轉載自 http://www.dotblogs.com.tw/atowngit/archive/2010/01/16/13047.aspx
2010年12月9日 星期四
資料庫交易寫法TransactionScope、SqlTransact
資料庫交易寫法TransactionScope、SqlTransact
資料庫沒有了交易是很要命的,無法確保資料庫的正確,此篇就是在介紹交易的寫法。
資料庫沒有了交易是很要命的,無法確保資料庫的正確,此篇就是在介紹交易的寫法。
string strConn = "連線字串";
SqlConnection conn = new SqlConnection(strConn);
conn.Open();
SqlTransaction tran = con.BeginTrasaction();
try
{
SqlCommand cmd = new SqlCommand("SQL語法", conn);
cmd.Transaction = tran;
//做你想做的...
//做完以後
tran.Commit();
}
catch
{
tran.Rollback();//發生例外就會滾回去
}
finally
{
conn.Dispose();
}
using (TransactionScope scope = new TransactionScope())
{
string strConn = "連線字串";
SqlConnection conn = new SqlConnection(strConn);
SqlCommand cmd = new SqlCommand("SQL語法", conn);
try
{
conn.Open();
//做你想做的...
//做完以後
scope.Complete();
}
//Mission Accomplished!
catch (Exception ex)
{
}
//發生例外時,會自動rollback
finally
{
cmd.Dispose();
conn.Close();
conn.Dispose();
}
}
搬移大量資料至 SQL Server
ADO.NET 的SqlBulkCopy 類別,用來搬移大量資料蠻好用的,雖然不是什麼新玩意兒,最近有一些需要,因此拿來用,記錄一下:
其中的destTable為 SQL Server 目的資料表,dr 則是來源資料,可以是DataReader或是 DataTable等等,來源資料不需要的是 SQL Server,只要能轉成DataReader或是 DataTable即可。
SqlConnection sqlconn = new SqlConnection(connstring);
SqlBulkCopy sqlBulkCopy = new SqlBulkCopy(sqlconn);
using (sqlBulkCopy){ //大量複製的目的資料
sqlBulkCopy.DestinationTableName = destTable; sqlBulkCopy.WriteToServer(dr); //大量複製開始}
sqlconn.Close();
其中的destTable為 SQL Server 目的資料表,dr 則是來源資料,可以是DataReader或是 DataTable等等,來源資料不需要的是 SQL Server,只要能轉成DataReader或是 DataTable即可。
訂閱:
文章 (Atom)