随笔-471  评论-210  文章-0  trackbacks-21

最新评论

共5页: 1 2 3 4 5 下一页 
--引用--------------------------------------------------
海阔天空: 就是转移备份吗?Xcopy、delete不是更好?

--------------------------------------------------------

重點是要保持來源地的目錄結構,本人對Xcopy不精通
就是转移备份吗?Xcopy、delete不是更好?
re: [转]部分中国著名黑客的联系方式 中国黑客网络 2008-08-27 13:13  
哇`我师傅也在里面呀```

中国黑客网络
www.cnhacknet.com
欢迎大家指点!!
2008-08-18 08:33 嗯,

QQ 550444455 技术团队还是蛮厉害的.

我姑父的公司就找过他们办事 就是收费太高了
2008-04-15 12:58 比利时著名黑客团体在2008年期间进军中国黑客界,耗姿百万吸引国内各大高校网络技术精英,比利时黑客联盟国内黑客业务QQ:550444455
4
他们的天空 2008-04-15 13:26 楼上的老大,错了

qq550444455早已经被广外女生团队收编了,比利时方面只留下几名技术人员在中国做业务协作,其他人员早已返回比利时,qq550444455,目前主人:灵灵,广外女生网络小组主管,开发作品:广外女生远程控制软件、广外幽灵等,目前与国外黑客技术团队合作,自己成立了国际性黑客技术团体,常年承接海内外入侵业务,自2007年下半年开始,在中国黑客界地位逐步领先其他团队,而且部分台湾商家更是频频与其合作,到底广外女生有没有涉及非法黑客技术行为,在黑客界的评论更是各有所云
微软PhotoSynth 3D图片浏览器登场
驱动之家[原创] 作者:Zzyq 编辑:Zzyq 2006-11-10 12:08:00 Loading [投递]


从之前微软放出的一次技术预览我们已经多少对Photosynth项目有了一些了解,PhotoSynth最早宣布于今年的SIGGRAPH 2006展会上,微软对其的描述是:“一款结合幻灯片与游戏体验的图片浏览工具,浏览者可以放大获取更为精确的细节也能缩小看到更为直观的全景图像。”

Photosynth的功能非常吸引人:当你往Photosynth里载入一个地方的某张图片,它会把与这个地方相关的所有照片收集、汇聚到一起,并据此建构起这个地方的虚拟3D模型。汇集起来的成千上万的图片,并且可以补充这个地方每一个局部的细节信息,这样汇集而成的那张总图,不仅是可三维化的,而且是可清晰地观察每一个局部的细节的。你所需要做的就是不断放大整个图像。

试想,如果某个饭店想在微软地图(Photosynth属于微软)上宣传自己,它要做的就是就是拿一个数码相机,把饭店店面的图像或大或小或总体或局部地拍摄它几十站上百张,然后把它上传到网络上。剩下的事微软地图就会帮你自动完成了。用户如果想要了解这家饭店的面貌,只要找到一张饭店的图片,把它载入Photosynth ,一切就呈现在他眼前了。

目前微软已经开始提供了Photosynth图片的收集整理工作,不过用户处理他的照片时可能会耗费数小时乃至数天时间。并且这还是有前提的,用户的PC需要满足Photosynth顺畅运行的条件,一台安装Windows XP SP2或者Windows Vista系统并且带有合适显卡的电脑是必不可少的。

Photosynth诞生自微软的Live Labs实验室,这个实验室创建于2006年2月份,去年四月加入MSN团队顶级研究员Gary Flake带领着一批人马研究如何在Internet互联网上开发新的应用项目。

目前微软Live Labs实验室为大家提供了四个场景的预演示,有兴趣的朋友可以去从微软的Live Labs实验室的官方网站看看。

http://labs.live.com/photosynth/SystemCheck.htm

執行 SQL Server 之電腦上的交易記錄檔意外地擴充或滿溢
檢視此文章適用的產品。
文章編號 : 317375
上次校閱 : 2006年3月23日
版次 : 5.1
在此頁中

結論

原因

未認可的交易

超大型交易

操作:DBCC DBREINDEX 及 CREATE INDEX

還原交易記錄檔備份時

用戶端應用程式未處理所有結果

在交易記錄檔完成擴充之前,查詢逾時,且您收到錯誤的「記錄已滿」錯誤訊息

未複寫的交易

其他相關資訊
結論
在 SQL Server 7.0、SQL Server 2000 與 SQL Server 2005 中,使用自動成長設定,便可讓交易記錄檔自動擴充。

一般而言,檢查點或交易記錄備份會觸發交易記錄截斷,如果交易記錄檔能保留其間發生的交易最大數目,那麼檔案大小就會十分固定。

但是,在某些情況下,交易記錄可能會變得非常大,而導致空間不足或是滿溢。一般而言,當交易記錄檔佔據可用的硬碟空間而且無法繼續擴充時,您就會收到下列錯誤訊息:
Error:9002, Severity:17, State:2
The log file for database '%.*ls' is full. (錯誤:9002,嚴重性:17,狀態:資料庫 '%.*ls' 的記錄檔已滿)
如果您使用 SQL Server 2005,可能會收到類似下列的錯誤訊息:
Error:9002, Severity:17, State:2
The transaction log for database '%.*ls' is full.To find out why space in the log cannot be reused, see the log_reuse_wait_desc column in sys.databases (錯誤:9002,嚴重性:17,狀態:2 資料庫 %.*ls 的交易記錄檔已滿。如果要瞭解為何無法重複使用記錄檔中的空間,請參閱 sys.databases 中的 log_reuse_wait_desc 欄位。)
除了這個錯誤訊息以外,因為交易記錄空間不足無法繼續擴充,所以 SQL Server 可能會將資料庫標記為可疑。如需如何修復這個情況的詳細資訊,請參閱《SQL Server 線上叢書》的<磁碟空間不足>主題。

此外,交易記錄擴充可能會導致下列情況: • 大型交易記錄檔。
• 交易可能會失敗並開始復原。
• 交易完成可能要花費一段時間。
• 可能會發生效能問題。
• 可能會發生封鎖。

回此頁最上方

原因
因為下列的原因或情況,可能會擴充交易記錄檔: • 未認可的交易
• 超大型交易
• 作業:DBCC DBREINDEX 及 CREATE INDEX
• 還原交易記錄備份時
• 用戶端應用程式未處理所有結果
• 在交易記錄完成擴充之前,查詢逾時,您收到錯誤的「記錄已滿」錯誤訊息
• 未複寫的交易

未認可的交易
如果您沒有發出明確的 COMMIT 或 ROLLBACK 命令,則明確交易會維持在未認可的狀態。當應用程式發出 CANCEL 或 Transact SQL KILL 命令,但沒有對應的 ROLLBACK 命令時,最常發生這個問題。發生交易取消的情況,但並未復原;因此,SQL Server 無法截斷這個動作之後的每個交易,因為中止的交易仍在開啟中。您可以使用 DBCC OPENTRAN Transact-SQL 參照,以確定在特定時間中,資料庫中是否有現用交易。 如需有關這個特定案例的詳細資訊,請按一下下列文件編號,檢視「Microsoft 知識庫」中的下列文件:
295108 (http://support.microsoft.com/kb/295108/) Incomplete transaction may hold large number of locks and case blocking
171224 (http://support.microsoft.com/kb/171224/) INF: Understanding How the Transact-SQL KILL Command Works
此外,請參閱《SQL Server 線上叢書》中的<DBCC OPENTRAN>主題。

可能會產生未認可交易的案例: • 假設所有錯誤原因都會復原的應用程式設計。
• 在復原到具名交易或特別巢狀的具名交易時,並不會完全考慮到 SQL Server 行為的應用程式設計。如果您嘗試復原到內部命名的交易,則會收到下列錯誤訊息:
Server:Msg 6401, Level 16, State 1, Line 13 Cannot roll back InnerTran.(伺服器:Msg 6401,Level 16,State 1,Line 13 無法復原 InnerTran。找不到該名稱的交易或檢查點)
SQL Server 產生錯誤訊息之後,就會繼續執行下一個陳述式。這是原本設計的作法。如需詳細資訊,請參閱《SQL Server 線上叢書》的<巢狀交易>或<SQL Server 內部>主題。

當您設計應用程式時,Microsoft 建議您執行下列動作: • 只開啟一個交易單元 (請先考慮另一個程序可能會呼叫您的程序)。
• 請先檢查 @@TRANCOUNT,然後再發出 COMMIT、ROLLBACK、RETURN 或類似的命令或陳述式。
• 在撰寫程式碼時,請假設另一個 @@TRANCOUNT 可能會「巢串」您的 @@TRANCOUNT,並規劃在發生錯誤時,復原外部的 @@TRANCOUNT。
• 檢視交易的檢查點及標記選項(這些動作並不會釋放鎖定!)
• 執行完整的測試。

• 允許在交易內部執行使用者動作的應用程式。因為無法截斷開啟的交易且會將新交易增加到開啟交易後的記錄中,因此會導致交易維持開啟狀態一段很長的時間,並造成封鎖及交易記錄擴充。
• 未檢查 @@TRANCOUNT 以確定沒有開啟交易的應用程式。
• 網路或其他錯誤,會在未通知 SQL Server 的情形下,逕行關閉連至 SQL Server 的用戶端應用程式連線。
• 連接共用。建立工作者執行緒之後,如果這些執行緒沒有提供連線的服務,SQL Server 就會予以重新使用。如果使用者連線開始交易,而且在認可或復原交易之前中斷連線,接著之後的連線便會重新使用相同的執行緒,則之前的交易則會仍然維持開啟的狀態。這個情況會導致鎖定 (從之前的交易就保持開啟的狀態),而且可以避免截斷記錄中的認可交易,這樣就會造成很大的記錄檔大小。如需有關連接共用的詳細資訊,請按一下下面的文件編號,檢視「Microsoft 知識庫」中的文件:
164221 (http://support.microsoft.com/kb/164221/) INFO: How to Enable Connection Pooling in an ODBC Application

超大型交易
根據每次的交易,截斷交易記錄檔中的記錄。如果交易範圍相當大,除非交易完成,否則都不會將之後開始的交易及任何交易從交易記錄中移除。這可能會造成大型的記錄檔。如果交易夠大,記錄檔可能會用盡可用的硬碟空間,並產生「交易記錄已滿」類型的錯誤訊息,例如「錯誤 9002」。當您收到此類型的錯誤訊息,如需如何處理的詳細資訊,請參閱本文的<其他相關資訊>一節。此外,將需要許多時間及 SQL Server 負荷才能復原大型交易。


操作:DBCC DBREINDEX 及 CREATE INDEX
因為 SQL Server 2000 的復原模型產生的變更,所以當您使用完整復原模式並執行 DBCC DBREINDEX,交易記錄擴充的程度會比 SQL Server 7.0 在相同的復原模式中,藉由使用 SELECT INTO 或 BULK COPY,並關閉 "Trunc.Log on chkpt."。

雖然在 DBREINDEX 作業之後的交易記錄大小可能會有問題,但這個方法的確提供了較佳的記錄還原效能。


還原交易記錄檔備份時
這會在下列「Microsoft 知識庫」文件中進行說明:
232196 (http://support.microsoft.com/kb/232196/) INF: Log Space Used Appears to Grow After Restoring from Backup

如果您將 SQL Server 2000 設定為使用大量登入模式,並發出 BULK COPY 或 SELECT INTO 陳述式,則在您備份交易記錄時,將會標記每個變更的範圍,並在之後進行備份。雖然這可以讓您在執行大量作業之後,備份交易記錄並從失敗中復原,但這也會增加交易記錄的大小。SQL Server 7.0 不具備這個功能。SQL Server 7.0 只會記錄已變更的程度,但不會記錄實際的程度。因此,雖然在大量登入模式中,記錄作業在 SQL Server 2000 會比在 SQL Server 7.0 佔據較多的空間,但不會大於完整模式所使用的空間。


用戶端應用程式未處理所有結果
如果您向 SQL Server 發出查詢,但未立即處理結果,則可能會保留鎖定並降低伺服器上的並行。

例如,假設您發出的查詢,需要兩頁的資料列才能填寫結果集。SQL Server 會剖析、編譯及執行查詢。這代表會將共用鎖定置放在這兩頁上,其中會包含您必須符合查詢的資料列。此外,假設並非所有資料列都可放入一個 SQL Server TDS 封包 (亦即伺服器與用戶端通訊的方法)。則會填入 TDS 封包並將之傳送到用戶端。如果第一頁的所有資料列都可容納在 TDS 封包中,SQL Server 就會釋放該頁上的共用鎖定,但會保留第二頁的共用鎖定。SQL Server 之後會等候用戶端要求其他資料 (例如,您可以使用 DBNEXTROW/DBRESULTS、SQLNextRow/SQLResults 或 FetchLast/FetchFirst 來執行這項操作)。

這代表在用戶端要求其餘資料之前,共用鎖定都會予以保留。要求第二頁資料的其他處理序可能會被封鎖。


在交易記錄檔完成擴充之前,查詢逾時,且您收到錯誤的「記錄已滿」錯誤訊息
在這種情況下,雖然有足夠的磁碟空間,您仍會收到「空間不足」錯誤訊息。

這種情形在 SQL Server 7.0 和 SQL Server 2000 中會有所不同。

如果交易記錄幾乎滿溢,查詢可能會導致交易記錄自動進行擴充。這會花費額外的時間,而且查詢可能會因此停止,或超過其逾時期間。SQL Server 7.0 在這個情況下會傳回錯誤 9002。這個問題不適用於 SQL Server 2000。

在 SQL Server 2000 中,如果您開啟資料庫的 [自動壓縮] 選項,則會有一小段時間,交易記錄會嘗試自動擴充,但是因為同時間會執行 [自動壓縮] 功能,所以無法進行此項操作。這也可能造成錯誤 9002 的錯誤執行個體。

一般而言,會迅速自動擴充交易記錄檔。但是,在下列情況下,可能會花費比一般更長的時間: • 擴充的遞增單位太小。
• 伺服器因為各種原因而速度緩慢。
• 硬碟機速度不夠快。

未複寫的交易
如果您使用複寫,便可以擴充 publisher 資料庫的交易記錄檔大小。對已複寫物件造成影響的交易會被標記為「可供複寫」。直到記錄讀取器工作將交易複製到散發資料庫並予以取消標記之前,在檢查點或您備份交易記錄之後,將不會刪除這些交易 (例如未認可交易)。如果記錄讀取器工作發生問題,因而無法讀取 publisher 資料庫中的這些交易,則交易記錄的大小可能會隨著未複寫交易數量的增加而繼續擴充。您可以使用 DBCC OPENTRAN Transact-SQL 參照以辨別最舊的未複寫交易。

如需有關疑難排解未複寫交易的其他資訊,請參閱《SQL Server 線上叢書》的<sp_replcounters>和<sp_repldone>主題。

如需詳細資訊,請按一下下面的文件編號,檢視「Microsoft 知識庫」中的文件:
306769 (http://support.microsoft.com/kb/306769/) FIX: Transaction Log of Snapshot Published Database Cannot Be Truncated
240039 (http://support.microsoft.com/kb/240039/) FIX: DBCC OPENTRAN Does Not Report Replication Information
198514 (http://support.microsoft.com/kb/198514/) FIX: Restore to New Server Causes Transactions to Remain in Log
回此頁最上方

其他相關資訊
會將任何資料庫的交易記錄管理為一組虛擬記錄檔 (VLF),其大小是 SQL Server 在內部根據記錄檔大小和記錄擴充程度而加以判斷。記錄會持續以整個 VLF 的單位進行擴充,而且只可以壓縮成 VLF 範圍。VLF 存在於三個狀態其中之一:ACTIVE、RECOVERABLE 及 REUSABLE。 • ACTIVE:記錄的現用部分會從最小序列號 (LSN) 開始 (此序列號代表現用 (未認可) 的交易)。記錄的現用部分則會在最後寫入的 LSN 結束。任何包含現用記錄部分的 VLF 都會被視為現用的 VLF (實體記錄中的未使用空間不是任何 VLF 的一部分)。
• RECOVERABLE:只有在維護記錄備份序列以進行修復時,才需要最舊現用交易之前的記錄部分。
• RESUABLE:如果您並未維護交易記錄備份,或是您已經備份記錄,則 SQL Server 會重新使用最舊現用交易之前的 VLF。
當 SQL Server 達到實體記錄檔的結尾,則會藉由將 CIRCLING BACK 作業發到檔案的開頭,開始重新使用實體檔案中的空間。實際上,SQL Server 會針對記錄檔中復原或備份時不再需要的空間,進行重複使用。如果您正在維護備份序列,則在您備份或截斷那些記錄之前,將無法覆寫最小 LSN 之前的記錄部分。在您執行記錄備份之後,SQL Server 可以重新回到檔案的開頭。在 SQL Server 重新開始撰寫記錄檔先前的記錄之後,記錄的可重複使用部分就會位於邏輯記錄的結尾和記錄的現用部分之間。

如需詳細資訊,請參閱《SQL Server 線上叢書》的<交易記錄實體架構>主題。此外,您可以在 Inside SQL Server 7.0 的 190 頁 (Soukup, Ron.Inside Microsoft SQL Server 7.0, Microsoft Press, 1999)、以及 Inside SQL Server 2000 的 182 到 186 頁 (Delaney, Kalen.Inside Microsoft SQL Server 2000, Microsoft Press, 2000) 中看到這個主題的絕佳圖表和討論。 SQL Server 7.0 及 SQL Server 2000 資料庫可以進行自動擴充和自動壓縮。您可以使用這些選項協助您壓縮或擴充交易記錄。

如需有關這些選項將如何影響伺服器的詳細資訊,請按一下下面的文件編號,檢視「Microsoft 知識庫」中的文件:
315512 (http://support.microsoft.com/kb/315512/) INF:SQL Server 中的 Autogrow 及 Autoshrink 設定考量
交易記錄檔的截斷和壓縮之間有差異。當 SQL Server 截斷交易記錄檔時,這代表該檔案 (例如已認可的交易) 的內容已經遭到刪除。但是,當您從磁碟空間的觀點 (例如,在 Windows Explorer 中或使用 dir 命令) 來檢視檔案的大小,大小是維持不變的。但是,新的交易目前可以重新使用 .ldf 檔案內部的空間。只有當 SQL Server 壓縮交易記錄檔的大小時,您才可以確實看到記錄檔的實體大小中的變更。

如需有關如何壓縮交易記錄的詳細資訊,請按一下下面的文件編號,檢視「Microsoft 知識庫」中的文件:
256650 (http://support.microsoft.com/kb/256650/) INF:如何將 SQL Server 交易記錄檔壓縮
272318 (http://support.microsoft.com/kb/272318/) INF: Shrinking the Transaction Log in SQL Server 2000 with DBCC SHRINKFILE
如需有關 SQL Server 6.5 交易記錄使用率的詳細資訊,請按一下下面的文件編號,檢視「Microsoft 知識庫」中的文件:
110139 (http://support.microsoft.com/kb/110139/) INF:SQL 交易記錄檔滿溢的原因
回此頁最上方


--------------------------------------------------------------------------------

這篇文章中的資訊適用於:
• Microsoft SQL Server 2000 Standard Edition
• Microsoft SQL Server 7.0 Standard Edition
• Microsoft SQL Server 2005 Standard Edition
• Microsoft SQL Server 2005 Developer Edition
• Microsoft SQL Server 2005 Enterprise Edition
• Microsoft SQL Server 2005 Express Edition
• Microsoft SQL Server 2005 Workgroup Edition

回此頁最上方

關鍵字: kbinfo KB317375

回此頁最上方

Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。
方法一:
1. 运行SQL的管理器(Enterpric Manage),打开Database并选中数据库名,
点击右键弹出数据库属性菜单,选中[All Tasks]->[Truncate Log]截断日志
选中数据库属性菜单中的[All Tasks]->[Shrink Database]收缩数据库

2. 选中数据库属性菜单中的[Properties]->[Transcations Log]页
选择单选项[Restrict filegrowth]500M,限制Log文件的增加为为500M(可以根据实际硬盘情况而定)

3. 选中数据库属性菜单中的[Properties]->[Proper]页,选中Auto Shrink自运收缩数据库


方法二:
利用“查询分析器”,手工收缩

backup log [DatabaseName] with no_log

USE [DatabaseName]
GO
DBCC SHRINKFILE ([Database_log_file], 200)
GO
软件自动在线升级的原理

  写两个程序,一个是主程序;一个是升级程序;所有升级任务都由升级程序完成。

  1.启动升级程序,升级程序连接到网站,下载新的主程序(当然还包括支持的库文件、XML配置文档等)到临时文件夹;

  2.升级程序获取服务器端XML配置文件中新版本程序的更新日期或版本号或文件大小;

   3.升级程序获取原有客户端应用程序的最近一次更新日期或版本号或文件大小,两者进行比较;如果发现升级程序的日期大于原有程序的最新日期,则提示用户 是否升级;或者是采用将现有版本与最新版本作比较,发现最新的则提示用户是否升级;也有人用其它属性如文件大小进行比较,发现升级程序的文件大小大于旧版 本的程序的大小则提示用户升级。本文主要采用比较新旧版本更新日期号来提示用户升级。

  4.如果用户选择升级,则获取下载文件列表,开始进行批量下载文档;

  5.升级程序检测旧的主程序是否活动,若活动则关闭旧的主程序;

  6.删除旧的主程序,拷贝临时文件夹中的文件到相应的位置;

  7.检查主程序的状态,若状态为活动的,则启动新的主程序;

  8.关闭升级程序,升级完成[4]。

  4 用C#实现在线升级的关键步骤

  这里我主要使用日期信息来检测是否需要下载升级版本。

  4.1 准备一个XML配置文件

  名称为AutoUpdater.xml,作用是作为一个升级用的模板,显示需要升级的信息。

<?xml version="1.0"?> //xml版本号
<AutoUpdater>
<URLAddres URL="http://www.dahuagong.com/update"/>//升级文件所在服务器端的网址
<UpdateInfo>
<UpdateTime Date = "2005-02-02"/> //升级文件的更新日期
<Version Num = "1.0.0.1"/> //升级文件的版本号
</UpdateInfo>
<UpdateFileList> //升级文件列表
<UpdateFile FileName = "aa.txt"/> //共有三个文件需升级
<UpdateFile FileName = "VB40.rar"/>
<UpdateFile FileName = "VB4-1.CAB"/>
</UpdateFileList>
<RestartApp>
<ReStart Allow = "Yes"/> //允许重新启动应用程序
<AppName Name = "TIMS.exe"/> //启动的应用程序名
</RestartApp>
</AutoUpdater>

  从以上XML文档中可以得知升级文档所在服务器端的地址、升级文档的更新日期、需要升级的文件列表,其中共有三个文件需升级:aa.txt、VB40.rar、VB4-1.CAB。以及是否允许重新启动应用程序和重新启动的应用程序名。

  4.2 获取客户端应用程序及服务器端升级程序的最近一次更新日期

  通过GetTheLastUpdateTime()函数来实现。

private string GetTheLastUpdateTime(string Dir)
{
string LastUpdateTime = "";
string AutoUpdaterFileName = Dir + @"\AutoUpdater.xml";
if(!File.Exists(AutoUpdaterFileName))
return LastUpdateTime;
//打开xml文件
FileStream myFile = new FileStream(AutoUpdaterFileName,FileMode.Open);
//xml文件阅读器
XmlTextReader xml = new XmlTextReader(myFile);
while(xml.Read())
{
if(xml.Name == "UpdateTime")
{
//获取升级文档的最后一次更新日期
LastUpdateTime = xml.GetAttribute("Date");
break;
}
}
xml.Close();
myFile.Close();
return LastUpdateTime;
}

  通过XmlTextReader打开XML文档,读取更新时间从而获取Date对应的值,即服务器端升级文件的最近一次更新时间。

函数调用实现:
//获取客户端指定路径下的应用程序最近一次更新时间
string thePreUpdateDate = GetTheLastUpdateTime(Application.StartupPath);
Application.StartupPath指客户端应用程序所在的路径。

//获得从服务器端已下载文档的最近一次更新日期
string theLastsUpdateDate = GetTheLastUpdateTime(theFolder.FullName);
theFolder.FullName指在升级文档下载到客户机上的临时文件夹所在的路径。

  4.3 比较日期

  客户端应用程序最近一次更新日期与服务器端升级程序的最近一次更新日期进行比较。

//获得已下载文档的最近一次更新日期
string theLastsUpdateDate = GetTheLastUpdateTime(theFolder.FullName);
if(thePreUpdateDate != "")
{
//如果客户端将升级的应用程序的更新日期大于服务器端升级的应用程序的更新日期
if(Convert.ToDateTime(thePreUpdateDate)>=Convert.ToDateTime(theLastsUpdateDate))
{
MessageBox.Show("当前软件已经是最新的,无需更新!","系统提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
this.Close();
}
}
this.labDownFile.Text = "下载更新文件";
this.labFileName.Refresh();
this.btnCancel.Enabled = true;
this.progressBar.Position = 0;
this.progressBarTotal.Position = 0;
this.progressBarTotal.Refresh();
this.progressBar.Refresh();

//通过动态数组获取下载文件的列表
ArrayList List = GetDownFileList(GetTheUpdateURL(),theFolder.FullName);
string[] urls = new string[List.Count];
List.CopyTo(urls, 0);

  将客户端升级的应用程序的日期与服务器端下载的应用程序日期进行比较,如果前者大于后者,则不更新;如果前者小于后者,则通过动态数组获取下载文件的列表,开始下载文件。

  通过BatchDownload()函数来实现。升级程序检测旧的主程序是否活动,若活动则关闭旧的主程序;删除旧的主程序,拷贝临时文件夹中的文件到相应的位置;检查主程序的状态,若状态为活动的,则启动新的主程序。

private void BatchDownload(object data)
{
this.Invoke(this.activeStateChanger, new object[]{true, false});
try
{
DownloadInstructions instructions = (DownloadInstructions) data;
//批量下载
using(BatchDownloader bDL = new BatchDownloader())
{
bDL.CurrentProgressChanged += new DownloadProgressHandler(this.SingleProgressChanged);
bDL.StateChanged += new DownloadProgressHandler(this.StateChanged);
bDL.FileChanged += new DownloadProgressHandler(bDL_FileChanged);
bDL.TotalProgressChanged += new DownloadProgressHandler(bDL_TotalProgressChanged);
bDL.Download(instructions.URLs, instructions.Destination, (ManualResetEvent) this.cancelEvent);
}
}
catch(Exception ex)
{
ShowErrorMessage(ex);
}
this.Invoke(this.activeStateChanger, new object[]{false, false});
this.labFileName.Text = "";
//更新程序
if(this._Update)
{
//关闭原有的应用程序
this.labDownFile.Text = "正在关闭程序....";
System.Diagnostics.Process[]proc=System.Diagnostics.Process.GetProcessesByName("TIMS");
//关闭原有应用程序的所有进程
foreach(System.Diagnostics.Process pro in proc)
{
pro.Kill();
}
DirectoryInfo theFolder=new DirectoryInfo(Path.GetTempPath()+"JurassicUpdate");
if(theFolder.Exists)
{
foreach(FileInfo theFile in theFolder.GetFiles())
{
//如果临时文件夹下存在与应用程序所在目录下的文件同名的文件,则删除应用程序目录下的文件
if(File.Exists(Application.StartupPath + \\"+Path.GetFileName(theFile.FullName)))
File.Delete(Application.StartupPath + "\\"+Path.GetFileName(theFile.FullName));
//将临时文件夹的文件移到应用程序所在的目录下
File.Move(theFile.FullName,Application.StartupPath + \\"+Path.GetFileName(theFile.FullName));
}
}
//启动安装程序
this.labDownFile.Text = "正在启动程序....";
System.Diagnostics.Process.Start(Application.StartupPath + "\\" + "TIMS.exe");
this.Close();
}
}

   这段程序是实现在线升级的关键代码,步骤有点复杂:首先用Invoke方法同步调用状态改变进程,然后调用动态链接库中批量下载 (BatchDownloader.cs)类启动批量下载,接着判断原有的主应用程序有没有关闭,如果没关闭,则用Process.Kill()来关闭主 程序。接下来,判断临时文件夹下(即下载升级程序所在的目录)是否存在与应用程序所在目录下的文件同名的文件,如果存在同名文件,则删除应用程序目录下的 文件,然后将临时文件夹的文件移到应用程序所在的目录下。最后重新启动主应用程序。这样更新就完成了。
楼上的有毛病吧
这显然是硕士的嘛
而且深圳上海8W年薪也不高啊
1。以系统管理员登陆服务器
2。假定CLIENT 号码为000,数据库的SCHEMA为SAPR3
C:\>SQLPLUS /NOLOG
SQL>CONNECT / AS SYSDBA
SQL>SELECT TABLE_NAME ,OWNER FROM DBA_TABLES WHERE TABLE_NAME='USR02';
TABLE_NAME OWNER
------------------------------ ---------------
USR02 SAPR3
SQL>DELETE FROM SAPR3.USR02 WHERE BNAME='SAP*' AND MANDT='000';
SQL>EXIT
然后就可以用SAP*登陆系统密码为pass
非常紧急!!!十万火急!!!sap超级用户密码锁定后,ddc密码又不知道,又不能删除数据库的数据,sap*的用户密码又不能问的情况下该怎么解锁?
re: [ZT]2008年到校园招聘各企业待遇曝光 天虎蓝骑士 2008-07-28 01:00  
是不是真的啊,听说本科生出去能拿4k就不错了!这里的居然有那么高,是不是在忽悠人啊?
re: [ZT]2008年到校园招聘各企业待遇曝光 预备役中尉 2008-07-23 09:55  
MMD,TMMD,我想我还是回去站岗最好了.我还是适合守卫边疆.
re: [ZT]2008年到校园招聘各企业待遇曝光 企业待遇曝光 2008-07-23 09:30  
大都挺不错的啊,这是哪个学校?
真强啊!应届生都开这高,是本科还是研究生?
对网站的侵入和编程有深厚的研究
Ado.Net读取Excel常见问题总结分类:.NET技术点滴
经常需要在数据库与Execl之间互导数据。net时代,ADO.NET可以使用使用Microsoft.Jet.OleDb访问访问Excel,网上已经有很多类似的资源,最典型也是最简单的可能如下:(asp.net环境)

// 连接字符串
string xlsPath = Server.MapPath("~/app_data/somefile.xls"); // 绝对物理路径
string connStr = "Provider=Microsoft.Jet.OLEDB.4.0;"
"Extended Properties=Excel 8.0;"
"data source=" xlsPath;
// 查询语句
string sql = "SELECT * FROM [Sheet1$]";

DataSet ds = new DataSet();
OleDbDataAdapter da = new OleDbDataAdapter(sql, connStr);
da.Fill(ds); // 填充DataSet

// 在这里对DataSet中的数据进行操作

// 输出,绑定数据
GridView1.DataSource = ds.Tables[0];
GridView1.DataBind();
很简单吧?!一切就像操作数据库一样,只是需要注意的是:
1。数据提供程序使用Jet,同时需要指定Extended Properties 关键字设置 Excel 特定的属性,不同版本的Excel对应不同的属性值: 用于 Extended Properties 值的有效 Excel 版本。
对于 Microsoft Excel 8.0 (97)、9.0 (2000) 和 10.0 (2002) 工作簿,请使用 Excel 8.0。

对于 Microsoft Excel 5.0 和 7.0 (95) 工作簿,请使用 Excel 5.0。

对于 Microsoft Excel 4.0 工作簿,请使用 Excel 4.0。

对于 Microsoft Excel 3.0 工作簿,请使用 Excel 3.0。

ref:http://msdn.microsoft.com/library/chs/default.asp?url=/library/CHS/dv_vbcode/html/vbtskcodeexamplereadingexceldataintodataset.asp" target="_new">http://msdn.microsoft.com/library/chs/default.asp?url=/library/CHS/dv_vbcode/html/vbtskcodeexamplereadingexceldataintodataset.asp

2。数据源路径使用物理绝对路径(同Access)

3。如何引用表名?
对 Excel 工作簿中表(或范围)的有效引用。
若要引用完全使用的工作表的范围,请指定后面跟有美元符号的工作表名称。例如:

select * from [Sheet1$]
若要引用工作表上的特定地址范围,请指定后面跟有美元符号和该范围的工作表名称。例如:

select * from [Sheet1$A1:B10]
若要引用指定的范围,请使用该范围的名称。例如:

select * from [MyNamedRange]
ref:http://msdn.microsoft.com/library/chs/default.asp?url=/library/CHS/dv_vbcode/html/vbtskcodeexamplereadingexceldataintodataset.asp" target="_new">http://msdn.microsoft.com/library/chs/default.asp?url=/library/CHS/dv_vbcode/html/vbtskcodeexamplereadingexceldataintodataset.asp
说明:
可以引用Excel 工作簿中的三种对象:
• 整张工作表:[Sheet1$] ,Sheet1 就是工作表的名称
• 工作表上的命名单元格区域:[MyNamedRange] (不需要指定工作表,因为整个xls中命名区域只能唯一)
XLS命名方法:选中单元格范围》插入》名称》定义
• 工作表上的未命名单元格区域 :[Sheet1$A1:B10]
(在关系数据库提供的各种对象中(表、视图、存储过程等),Excel 数据源仅提供相当于表的对象,它由指定工作簿中的工作表和定义的命名区域组成。命名区域被视为“表”,而工作表被视为“系统表”)

注意:
•必须使用[](方括号),否将报:
FROM 子句语法错误
•必须跟$(美元符号),否则报:
Microsoft Jet 数据库引擎找不到对象'Sheet2'。请确定对象是否存在,并正确地写出它的名称和路径。
•如果工作表名称不对,或者不存在,将报:
'Sheet2$' 不是一个有效名称。请确认它不包含无效的字符或标点,且名称不太长。
•在 如何在 Visual Basic 或 VBA 中使用 ADO 来处理 Excel 数据 中提到可以使用
~ 和 '(波浪线和单引号)代替[],使用ADO。NET测试没有成功,报:
FROM 子句语法错误
•当引用工作表明名([Sheet1$])时,数据提供程序认为数据表从指定工作表上最左上方的非空单元格开始。比如,工作表从第 3 行,C 列开始,第3行,C列之前以及第1、2行全为空,则只会显示从第3行,C列开始的数据;以最后表最大范围内的非空单元结束;
•因此,如需要精确读取范围,应该使用命名区域 [NamedRange],或者指定地址:[Sheet1$A1:C10]

4。如何引用列名?
•根据默认连接字符串中,数据提供程序会将有效区域内的第一行作为列名,如果此行某单元格为空则用F1、F2表示,其中序数,跟单元格的位置一致,从1开始;
•如果希望第一行作为数据显示,而非列名,可以在连接串的 Extended Properties 属性指定:HDR=NO
默认值为:HDR=NO 格式如下:

string connStr = "Provider=Microsoft.Jet.OLEDB.4.0;"
"Extended Properties=""Excel 8.0;HDR=NO"";"
"data source=" xlsPath;
注意: Excel 8.0;HDR=NO 需要使用双引号(这里的反斜扛,是C#中的转义)

ref: ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.VisualStudio.v80.chs/WD_ADONET/html/745c5f95-2f02-4674-b378-6d51a7ec2490.htm 中 《连接Excel》节(说明:在我自己的MSDN中,它的例子使用了两个双引号是错的,测试没有通过,原文这样说的:

注意,Extended Properties 所需的双引号必须还要加双引号。


在这种情况下,所有的列名都是以F开头,然后跟索引,从F1开始,F2,F3。。。。。。。

5。为什么有效单元格数据不显示出来?
出现这种情况的可能原因是,默认连接中,数据提供程序根据前面单元格推断后续单元个的数据类型。
可以通过 Extended Properties 中指定 IMEX=1

“IMEX=1;”通知驱动程序始终将“互混”数据列作为文本读取
ref:同4

PS:在baidu这个问题的时候,有网友说,将每个单元都加上引号,这固然是格方案,但是工作量何其大啊,又不零活,庆幸自己找到”治本药方“

more ref:
如何在 Visual Basic 或 VBA 中使用 ADO 来处理 Excel 数据
http://dotnet.aspx.cc/ShowDetail.aspx?id=C673E2CD-3F1E-4919-8CE0-D69B894A0599

注意:
在网上有很多同志说是加上HDR或IMEX这两个属性值后会报“找不到可安装的ISAM ”的错误。这时解决方法很简单:
就是把连接串写成如下形式:

Provider=Microsoft.Jet.Oledb.4.0;Data Source={0};Extended Properties='Excel 8.0;HDR=1; IMEX=1;' (注意红色标注的单引号)

而不要写成这样的形式:

Provider=Microsoft.Jet.Oledb.4.0;Data Source={0};Extended Properties=Excel 8.0;HDR=1; IMEX=1;


re: VS2008中文版发布 村蝈蝈 2008-07-16 02:21  
mark.
re: IT业平均年薪下降3600元 收入不足55000元 预备役中尉 2008-07-14 17:36  
现阶段主要矛盾是人民日益增长的生活物质需求和始终不增长的工资之间的矛盾!
俺就属于建筑装饰业……
re: 一個“語言”引發的血案 DHZ 2008-07-11 17:25  
SB。不同的语言用在不同的地方, 把他们组合起来不就好了。
re: DataTable排序的一般方法 巍巍边疆 2008-07-08 10:55  
錯了、錯了,不好意思,剛剛發現
re: DataTable排序的一般方法 预备役中尉 2008-07-07 22:37  
二和三没两样似乎.

PS:快.请求交通部支援.(开个玩笑,别介意)
re: DataTable排序的一般方法 Movie 2008-07-07 20:32  
放哪了啊
re: DataTable排序的一般方法 JesseZhao 2008-07-06 08:04  
呵呵,可能发错地方了
re: DataTable排序的一般方法 Bēniaǒ 2008-07-06 02:15  
--引用-------------------------------------------------- 横刀天笑: 这个。。怎么跑到招聘区来了?呵呵 --------------------------------------------------------

这是?????
re: DataTable排序的一般方法 k j 2008-07-05 21:56  
2 和 3 有区别么?
re: DataTable排序的一般方法 横刀天笑 2008-07-05 20:10  
这个。。怎么跑到招聘区来了?呵呵
相同原理,在单个资源文件用特征码(Name)区分不同语言版本,在套用时进行区分,比较繁琐,不易维护
re: [轉]中国油价世界最高 是美国7倍! neoragex2002 2008-06-27 19:17  
显然的道理,不用算,国际油价暴涨就是因为打伊战后美大量扩充战略石油储备导致的,仗着有钱,基本上是有多少收多少,欧派克知道这不代表全球石油消费总趋势,不愿增产,美国国内石油早就远远过剩了。

说白了,为啥美要大量扩充战略石油储备?因为这是从伊拉克抢来的,跟洗钱一样,要洗干净才行!这纯粹是老美对全球资源的掠夺.......
嗯,不管怎样,政府补贴是不应该长久的。
但事实上,现在就是存在政府补贴。
有点道理,鼓励一个。
re: [轉]中国油价世界最高 是美国7倍! 请输入你的姓名 2008-06-27 17:29  
喝血射汇
re: [藏]疯狂的极端,20款IM,UI比比看 技术拓荒者 2008-06-27 16:38  
tencent很讨厌,很无耻,很垃圾
对于单纯的资源文件怎么加多语言呢?
谢谢你的建议!
我们会考虑改进。
re: informix到oracle移植---函数 一如既往 2008-06-18 22:14  
我想问 一下:在 移植过程中 informix 中 的 load from insert into 这样 的 语句有 什么简便的替换?
re: [藏]疯狂的极端,20款IM,UI比比看 巍巍边疆 2008-06-15 17:58  
我可以很负责任的告诉你,就是QQ......
难道第20个是传说中的无耻的QQ?
数了数,只有19个啊,第20个呢?
re: 邓小平伸出一个手指:裁军100万 birdshome 2008-06-12 14:25  
裁军100w,完全有资格获炸药奖了。
re: [溫習]什么是Web 2.0 工作 2008-06-09 21:35  
人生的道路能改变吗
本人已經來回,尚未發現有什么異常,倒是發現有遮牌超速的不少,真的好多攝像頭!!!好多...
听说质量有??
顶个!
共5页: 1 2 3 4 5 下一页