因為多台在同一次攻擊,所以只會損壞一樣建築。
2008/03/28
2008/03/27
SQL Server的Identity欄位使用、查詢、重設
查詢目前 Identity值:
有時我們需要查詢目前 table 中該 identity 欄位最大值是多少時,可以利用 dbcc 指令,如下:
dbcc checkident('product', NORESEED)
可以獲得目前最大值的結果。
重設目前最大 identity 值:
一樣利用 dbcc 指令,如下:
dbcc checkident('product', RESEED, 100)
如此一來, 便能將目前的最大 identity 值指向100,當然若故意設比目前最大值小時,系統仍會接受,
但若 identity 遇上重覆資料時(如將 identity 設為 primary key時),將會發生重大問題,
該 table 變成無法 insert 資料,因為會發生 primary key violation,
解決方法當然就是將目前的 identity 修復,直接使用dbcc checkident('product', RESEED)
或 dbcc checkident('product')(兩者等義)即可順利修復。
identity 欄位遇上 rollback 時:
當 identity 欄位碰到 rollback 時,會發生跳號現象, 也就是說在 transaction 中,
insert 了一筆資料, 但又 rollback 時,該 identity 號會消失,如下測試:
begin tran
insert into products (product) values ('test rollback')
rollback tran
dbcc checkident('product', NORESEED)
這個觀念很重要,因為要維持 identity 特性,但又發生 rollback,
所以系統就直接跳號處理,避免發生重覆編號的問題。
2008/03/26
ComboBox 選項迭代
for each(var item:Object in combo.dataProvider) {
trace("label : " + item.label);
trace("data: " + item.data);
}
2008/03/25
自動 import 類別
當引用了一個尚未 import 的類別時,Eclipse 應該會在錯誤的程式碼最左側出現 x 按鈕,點下去就會出現 import 類別的選項,但是在 Flex Builder 中沒有這項功能。
解決的辦法是使用程式碼自動完成功能,Flex Builder 就會自動 import 所需的類別了。
判斷圖片是否載入完成
Image 類別繼承自 SWFLoader ,因此有 complete 事件,當圖片完成載入完成時會立刻觸發 complete 事件。
如果要取得圖片的寬度和高度應該使用
Image.contentWidth 和 Image.contentHeight。
在 complete 事件方法裡去取得 Image.width 和 Image.height 有時會得到零。
2008/03/24
Object 迭代
public static const CODE_MAP:Object = {
A: "上衣",
B: "針織衫",
C: "褲子",
D: "外套毛衣",
E: "裙子",
F: "洋裝",
G: "針織衫",
H: "帽鞋",
I: "配件包包",
J: "貼身衣物",
K: "其他"
}
for 迭代的結果是取出 key
for each 迭代的結果則是取出 value
for (var key:String in CODE_MAP) {
trace("key : " + key);
}
for each (var value:String in CODE_MAP) {
trace("value : " + value);
}
讓圖片(Image)可以單向放大縮小
只要將 Image 的 maintainAspectRatio 設為 false,圖片即可單向放大縮小,而不是依照等比例來放大縮小。
另外要設定 scaleContent = "true" 圖片才能放大縮小。
2008/03/23
當您使用 Visual C# . NET 使用 CookieContainer 來維護狀態在 Web 服務
在編寫 WebService 的時候,根據預設值, ASP . NET 工作階段支援之每一個 Web 服務方法已關閉。 您必須明確地啟用工作階段之每一個 Web Service 方法需要工作階段狀態支援。 若要啟用工作階段支援, WebMethod 屬性 (Attribute) 加入 EnableSession 屬性。 如果要執行這項操作,只要於 [WebMethod] 加入 EnableSession Attribute 即可
Example:
[WebMethod(EnableSession = true)]
public int Counter()
{ int count;
if (Session["count"] == null)
{
count = 1;
}
else
{
count = (int)Session["count"] + 1;
}
Session["count"] = count;
return count;
}
讀取時要設定一個CookieContainer變數來保留與WebService建立的Session連線
Example:
private System.Net.CookieContainer CookieContainer_c1;
protected void Btn_TestWebServiceSession_Click(object sender, EventArgs e)
{
this.s1 = new WebApplication1.EX_Service.Service1();
if ((System.Net.CookieContainer)Session["CookieC"] == null)
{
this.CookieContainer_c1 = new System.Net.CookieContainer();
Session["CookieC"] = this.CookieContainer_c1;
}
else
{
this.CookieContainer_c1 = (System.Net.CookieContainer)Session["CookieC"];
}
this.s1.CookieContainer = this.CookieContainer_c1;
this.showMessage(this.s1.Counter().ToString());
}
2008/03/22
PureMVC 文章
From Cairngorm to PureMVC : a quick comparison | Flex My Day
Handling deferred view component creation within the PureMVC framework
PureMVC_Implementation_Idioms_and_Best_Practices.pdf
Flex 框架比較投影片
https://admin.adobe.acrobat.com/_a200985228/p12266504/
2008/03/21
FlexBuilder3 出現 An internal build error has occurred 的解決辦法
Help -> Product Details ... -> Configuration Details -> View Error Log
之後會直接開啟 C:\diija\workspace\.metadata\.plugins\org.eclipse.ui.workbench\log 這個檔案,也可以手動去開啟這個檔案來查看錯誤原因,注意,最新的 log 訊息是放在最下方。
後來查到是因為 switch 沒有內容的關係
switch ( note.getName() )
{
}
java.lang.NullPointerException at macromedia.asc.semantics.ConfigurationEvaluator.evaluate(Unknown Source) at macromedia.asc.parser.SwitchStatementNode.evaluate(Unknown Source) at macromedia.asc.semantics.ConfigurationEvaluator.evalAndFold(Unknown Source) at macromedia.asc.semantics.ConfigurationEvaluator.evaluate(Unknown Source) at macromedia.asc.parser.StatementListNode.evaluate(Unknown Source) at macromedia.asc.semantics.ConfigurationEvaluator.evaluate(Unknown Source) at macromedia.asc.parser.FunctionCommonNode.evaluate(Unknown Source) at macromedia.asc.semantics.ConfigurationEvaluator.evaluate(Unknown Source) at macromedia.asc.parser.FunctionDefinitionNode.evaluate(Unknown Source) at macromedia.asc.semantics.ConfigurationEvaluator.evaluate(Unknown Source) at macromedia.asc.parser.StatementListNode.evaluate(Unknown Source) at macromedia.asc.semantics.ConfigurationEvaluator.evaluate(Unknown Source) at macromedia.asc.parser.ClassDefinitionNode.evaluate(Unknown Source) at macromedia.asc.semantics.ConfigurationEvaluator.evaluate(Unknown Source) at macromedia.asc.parser.StatementListNode.evaluate(Unknown Source) at macromedia.asc.semantics.ConfigurationEvaluator.evaluate(Unknown Source) at macromedia.asc.parser.ProgramNode.evaluate(Unknown Source) at flex2.compiler.as3.Compiler.parse1(Compiler.java:314) at flex2.compiler.API.computeSignatureChecksum(API.java:2073) at flex2.compiler.API.validateCompilationUnits(API.java:1658) at flex2.tools.oem.Application.compile(Application.java:744) at flex2.tools.flexbuilder.BuilderApplication.compile(BuilderApplication.java:354) at com.adobe.flexbuilder.multisdk.compiler.internal.ASApplicationBuilder$MyBuilder.mybuild(ASApplicationBuilder.java:271) at com.adobe.flexbuilder.multisdk.compiler.internal.ASApplicationBuilder.build(ASApplicationBuilder.java:122) at com.adobe.flexbuilder.multisdk.compiler.internal.ASBuilder.build(ASBuilder.java:139) at com.adobe.flexbuilder.multisdk.compiler.internal.ASItemBuilder.build(ASItemBuilder.java:73) at com.adobe.flexbuilder.project.compiler.internal.FlexProjectBuilder.buildItem(Unknown Source) at com.adobe.flexbuilder.project.compiler.internal.FlexProjectBuilder.build(Unknown Source) at com.adobe.flexbuilder.project.compiler.internal.FlexIncrementalBuilder.build(Unknown Source) at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:624) at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:37) at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:166) at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:197) at org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:246) at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:37) at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:249) at org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:302) at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:334) at org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:137) at org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:235) at org.eclipse.core.internal.jobs.Worker.run(Worker.java:55)
2008/03/20
SQL Server英文字母大小寫的判別
在資料庫上按滑鼠右鍵--> 內容 ...
在[一般]頁籤的最下方,即可看到此資料庫的 定序名稱...
定序名稱 可分解為:
使用語言字串
[_指定大寫] ==> 若加上 _Pref 即表示指定大寫,未加則不指定。
[_是否指定大小寫] ==> _CI 指定不分大小寫,_CS 指定區分大小寫。
[_是否區分腔調字] ==> _AI 指定不分腔調字,_AS 指定區分腔調字。
[_二進位排序] ==> 若加上 _BIN 即表示以二進位排序,未加則不指定。
舉例來說:
Chinese_Taiwan_Sroke_CI_AS <== 表示以繁體中文,不分大小寫,區分腔調字
Chinese_Taiwan_Sroke_CS <== 表示以繁體中文,要區分大小寫
程式碼編排
本文介紹 Pygments 的程式碼編排服務,這個 Web 服務可以將程式碼轉換為 HTML 格式,然後再將 HTML 貼至 Blogger 中,即可在 Blogger 中顯示編排及美化後的程式碼。
另外有一個 JavaScript 寫的 SyntaxHighlier 程式庫可以使用 JavaScript 來編排程式碼,但是 Blogger 沒辦法上傳 .js 檔,而且不支援 ActionScript 代碼轉換。
Pygments 支援一般常見的程式碼轉換,只要不太過於冷門的都有支援, Pygement 是 Python 寫的 OpenSource 程式庫。
在首頁中有一個介面,有幾個欄位是必填的,首先輸入 Code Description, 然後選取程式語言(Language), 之後把程式碼貼上,按 Hightlight 按鈕即會輸出 HTML。
然後觀看此頁的原始碼,將以下這段截取下來,貼至 Bloger 文章裡。
最後把程式碼的樣式貼至 Blogger 的樣版裡,如果想改變程式碼的顏色可以改 pygments_style.css 裡的內容。
http://pygments.org/media/pygments_style.css
<style type='text/css'>
.syntax { background: #111111; color: #ffffff }
.syntax .c { color: #008800; font-style: italic; background-color: #0f140f } /* Comment */
.syntax .err { color: #ffffff } /* Error */
.syntax .g { color: #ffffff } /* Generic */
.syntax .k { color: #fb660a; font-weight: bold } /* Keyword */
.syntax .l { color: #ffffff } /* Literal */
.syntax .n { color: #ffffff } /* Name */
.syntax .o { color: #ffffff } /* Operator */
.syntax .x { color: #ffffff } /* Other */
.syntax .p { color: #ffffff } /* Punctuation */
.syntax .cm { color: #008800; font-style: italic; background-color: #0f140f } /* Comment.Multiline */
.syntax .cp { color: #ff0007; font-weight: bold; font-style: italic; background-color: #0f140f } /* Comment.Preproc */
.syntax .c1 { color: #008800; font-style: italic; background-color: #0f140f } /* Comment.Single */
.syntax .cs { color: #008800; font-style: italic; background-color: #0f140f } /* Comment.Special */
.syntax .gd { color: #ffffff } /* Generic.Deleted */
.syntax .ge { color: #ffffff } /* Generic.Emph */
.syntax .gr { color: #ffffff } /* Generic.Error */
.syntax .gh { color: #ffffff; font-weight: bold } /* Generic.Heading */
.syntax .gi { color: #ffffff } /* Generic.Inserted */
.syntax .go { color: #444444; background-color: #222222 } /* Generic.Output */
.syntax .gp { color: #ffffff } /* Generic.Prompt */
.syntax .gs { color: #ffffff } /* Generic.Strong */
.syntax .gu { color: #ffffff; font-weight: bold } /* Generic.Subheading */
.syntax .gt { color: #ffffff } /* Generic.Traceback */
.syntax .kc { color: #fb660a; font-weight: bold } /* Keyword.Constant */
.syntax .kd { color: #fb660a; font-weight: bold } /* Keyword.Declaration */
.syntax .kp { color: #fb660a } /* Keyword.Pseudo */
.syntax .kr { color: #fb660a; font-weight: bold } /* Keyword.Reserved */
.syntax .kt { color: #cdcaa9; font-weight: bold } /* Keyword.Type */
.syntax .ld { color: #ffffff } /* Literal.Date */
.syntax .m { color: #0086f7; font-weight: bold } /* Literal.Number */
.syntax .s { color: #0086d2 } /* Literal.String */
.syntax .na { color: #ff0086; font-weight: bold } /* Name.Attribute */
.syntax .nb { color: #ffffff } /* Name.Builtin */
.syntax .nc { color: #ffffff } /* Name.Class */
.syntax .no { color: #0086d2 } /* Name.Constant */
.syntax .nd { color: #ffffff } /* Name.Decorator */
.syntax .ni { color: #ffffff } /* Name.Entity */
.syntax .ne { color: #ffffff } /* Name.Exception */
.syntax .nf { color: #ff0086; font-weight: bold } /* Name.Function */
.syntax .nl { color: #ffffff } /* Name.Label */
.syntax .nn { color: #ffffff } /* Name.Namespace */
.syntax .nx { color: #ffffff } /* Name.Other */
.syntax .py { color: #ffffff } /* Name.Property */
.syntax .nt { color: #fb660a; font-weight: bold } /* Name.Tag */
.syntax .nv { color: #fb660a } /* Name.Variable */
.syntax .ow { color: #ffffff } /* Operator.Word */
.syntax .w { color: #888888 } /* Text.Whitespace */
.syntax .mf { color: #0086f7; font-weight: bold } /* Literal.Number.Float */
.syntax .mh { color: #0086f7; font-weight: bold } /* Literal.Number.Hex */
.syntax .mi { color: #0086f7; font-weight: bold } /* Literal.Number.Integer */
.syntax .mo { color: #0086f7; font-weight: bold } /* Literal.Number.Oct */
.syntax .sb { color: #0086d2 } /* Literal.String.Backtick */
.syntax .sc { color: #0086d2 } /* Literal.String.Char */
.syntax .sd { color: #0086d2 } /* Literal.String.Doc */
.syntax .s2 { color: #0086d2 } /* Literal.String.Double */
.syntax .se { color: #0086d2 } /* Literal.String.Escape */
.syntax .sh { color: #0086d2 } /* Literal.String.Heredoc */
.syntax .si { color: #0086d2 } /* Literal.String.Interpol */
.syntax .sx { color: #0086d2 } /* Literal.String.Other */
.syntax .sr { color: #0086d2 } /* Literal.String.Regex */
.syntax .s1 { color: #0086d2 } /* Literal.String.Single */
.syntax .ss { color: #0086d2 } /* Literal.String.Symbol */
.syntax .bp { color: #ffffff } /* Name.Builtin.Pseudo */
.syntax .vc { color: #fb660a } /* Name.Variable.Class */
.syntax .vg { color: #fb660a } /* Name.Variable.Global */
.syntax .vi { color: #fb660a } /* Name.Variable.Instance */
.syntax .il { color: #0086f7; font-weight: bold } /* Literal.Number.Integer.Long */
</style>
在Web.config設定ConnectionStrings
在Web.config裡的
<connectionStrings/>
標籤中加入要設定的connectionStrings
範例如下:
<connectionStrings>
<add name="connStringName" connectionString="Data Source=localhost;Initial Catalog=TestDateBase;User ID=Guest;Password=guest"/>
</connectionStrings>
2008/03/19
使用 BitmapData 來做影像翻轉
水平翻轉:將最上列的像素與最下列的像素做交換, 將第二列的像素與最下列的像素做交換, 將第三列...., 一直做到中間列。
垂直翻轉:做法同上,只是改成最左欄與最右欄交換。
private function getImageBitmapData(image: Image):BitmapData
{
var bd:BitmapData = Bitmap(image.content).bitmapData;
return bd;
}
水平翻轉
private function horizontalFlip(event:MouseEvent):void {
var bitmapData:BitmapData = getImageBitmapData(img);
var rect:Rectangle = new Rectangle(0, 0, bitmapData.width, bitmapData.height);
var data:ByteArray = bitmapData.getPixels(rect);
var width:int = bitmapData.width;
var height:int = bitmapData.height;
var arr:Array = new Array(width * height * 4);
data.position = 0;
for(var y:int = 0; y < height; y++) {
for(var x:int = width - 1; x >= 0; x--) {
var val:int = data.readInt();
var pos:int = (y * width * 4) + (x * 4);
arr[pos + 0] = (val & 0xFF000000) >> 24;
arr[pos + 1] = (val & 0x00FF0000) >> 16; //data.readByte();
arr[pos + 2] = (val & 0x0000FF00) >> 8; //data.readByte();
arr[pos + 3] = (val & 0x000000FF); //data.readByte();
}
}
var b:ByteArray = new ByteArray();
for(var j:int = 0; j < data.length; j++) {
b.writeByte(arr[j]);
}
b.position = 0;
bitmapData.setPixels(rect, b);
}
垂直翻轉
private function verticalFlip(event:MouseEvent):void {
var bitmapData:BitmapData = getImageBitmapData(img);
var rect:Rectangle = new Rectangle(0, 0, bitmapData.width, bitmapData.height);
var data:ByteArray = bitmapData.getPixels(rect);
var width:int = bitmapData.width;
var height:int = bitmapData.height;
var arr:Array = new Array(width * height * 4);
data.position = 0;
for(var y:int = height - 1; y >= 0; y--) {
for(var x:int = 0; x < width; x++) {
var val:int = data.readInt();
var pos:int = (y * width + x) << 2; //在迴圈中,使用 shift 運算子來提升運算效率。
arr[pos + 0] = (val & 0xFF000000) >> 24;
arr[pos + 1] = (val & 0x00FF0000) >> 16; //data.readByte();
arr[pos + 2] = (val & 0x0000FF00) >> 8; //data.readByte();
arr[pos + 3] = (val & 0x000000FF); //data.readByte();
}
}
var b:ByteArray = new ByteArray();
for(var j:int = 0; j < data.length; j++) {
b.writeByte(arr[j]);
}
b.position = 0;
bitmapData.setPixels(rect, b);
}
取得分頁資料的Store Procedure
依照建立日期的順序取得分頁資料的Store Procedure
CREATE PROCEDURE [dbo].[sp_GetVoiceListByDate]
@pageNum int, --頁碼
@pageSize int --顯示數量
AS
BEGIN
Select Top (@pageSize) u.UserId, u.UserScore, v.Context, u.UserImagePath, v.CreateDate
From tb_UserInfor AS u, tb_Voice AS v
Where u.Id = v.Id
And v.CreateDate not in (
Select Top (@pageSize*@pageNum) v.CreateDate
From tb_UserInfor AS u, tb_Voice AS v
Where u.Id = v.Id
ORDER BY v.CreateDate desc )
Order By v.CreateDate desc END