發表文章

2022/11 機車路考

經驗分享: 方向燈只有變換車道、停車再開需要打 我覺得訣竅就是全程不要急加速,很容易噴出車道,只有定速緩慢行駛,考官不會催人 直線七秒: 不要催太快,會容易不到七秒飲恨,最好是緩慢前進,如果發現快要偏離航道,微微催油門,把整體方向變成前進,就不容易偏 U型區: 進來時微催油門,給點動力,之後放開,只擺動車頭,不然很容易衝出線外,盡量可以繞大圈一點有空間轉 重點是要找場地多練習幾次,基本上真的不難!

刪除大量資料造成Lock escalation鎖定升級 SQL Server

圖片
情況: 在MS-SQL 1.開一視窗Begin Transaction,delete from tableA (一萬多筆資料) 2.開另一視窗 insert into TableA () values() 發現步驟2怎麼都不會成功,就一直在執行 於是我將 步驟1刪除的資料縮小範圍,變成幾百筆,步驟2就馬上插入成功了! 於是,我上網問原來是因為Lock escalation(鎖升級)所造成的! 當在一個交易中(還未提交或rollback),操作了大量資料,應用程式會取得無數個row lock ,當row lock的數量超過了特定的值,為了減少locklist的負載,將row lock升級成table lock, 也就是整個表都被鎖起來了!導致我步驟2無法成功執行(另外一個連接)。 因為SQL Server Management在刪除大量資料時,是會全部找出來一起刪除,並不是一次一次刪除 為了避免鎖定升級的情況,我們可以採取分批次來刪除資料 批次刪除語法: /**每次刪除1000筆表A的資料**/ DoItAgain: DELETE TOP (1000) FROM TableA IF @@ROWCOUNT > 0 GOTO DoItAgain _________________________________________________________ 後來我還是想不通,我慢慢地把TOP的筆數提高,測試他的極限,發現7000又發生鎖定升級 DoItAgain: DELETE TOP ( 7000 ) FROM  TableA IF @@ROWCOUNT > 0 GOTO DoItAgain ____________________________________________________________ 如何觀察鎖定升級(Lock escalation)? 1. SQL Management studio選取Tool->SQL Server Profiler 2.連接對應的DB 3.如下圖選擇 之後你開著追蹤視窗,邊下達指令來實驗,當鎖定升級的情況發生,會看到如下紀錄: ___________________...

如何決定初始化ResourceManager時,要使用的參數

https://stackoverflow.com/questions/5093885/how-to-access-global-resources-for-localization-in-class-library?rq=1 new ResourceManager("Resources.lang", Assembly.Load("App_GlobalResources")); 如何決定初始化ResourceManager時,要使用的參數,請看第一個網址的回答

如何使用現成的web service

https://sites.google.com/site/easonsjiaoxuepingtai/asp-net-web-service/shi-yongasp-net-call-web-service-jiao-xue 請參考這個網站裡面的教學,圖文並茂讚:)

Unable to start debugging on the web server.Could not start ASP.NET debugging

圖片
ASP.NET 4.5 has not been registered on the Web server. You need to manually configure your Web server  for  ASP.NET 4.5  in   order  for   your site to run correctly. 當我作業系統換到Windows10,在我打開.NET 4.5發生的這兩個錯誤 我的作法是 1.打開控制台 2.選取程式集 3.選取程式與功能 4.你會看到一個開啟或關閉Windows功能的選項 5.點進去之後,找到IIS相關的(Internet Information Services) 6.展開之後看到World Wide Web服務展開他 7.找到ASP.NET4.7選擇他 8.按下確認,完成設定 如果你跟我的情況一樣,這樣或許可以解決問題,請參考:)

table 外來鍵限制

1.Create Table tableName( columName datatype not null Primary key, id int not null Primary key, gender nvarchar(50) ) 2.隨時使用某資料庫 Use DBname Go 3.增加FOREIGN KEY 限制 Alter table 資料表名字 add constraints 外來鍵的表_外來鍵_FK Foreign key (外來鍵名) references 要參考的主鍵表名(主鍵名) 4.如果要加之前外來鍵表不符合這個限制 需要先改之後才能加 例如說Person表有GenderId=99 這時候要加限制 但Gender表的id只有1,2 所以不符合 不能加 要把99改掉 5.外來鍵限制的意義 保持資料完整性 避免出現不符合常理的資料

c# out 輸出參數修飾子 example

    class Program     {         static void Main(string[] args)         {            //1.傳值 2.傳址 3.輸出參數 4.陣列參數            //out 3.輸出參數            //1.傳回多個值            //2.呼叫的地方和被呼叫的方法都要加上out關鍵字            //3.在含有out關鍵字參數的方法裡面,一定要將所有的out參數賦予值             int i = 4;             int j = 2;             int sum;             int multiple;             int division;             int subtraction;             para(i, j, out sum, out multiple, out division, out subtraction);             Console.WriteLine(sum);         ...

switch multi case

最近才知道switch可以用在多個case string name="zoe"; switch(name) {    case "zoe":    case "Rose":    case "Sue": Console.WriteLine("hello " + name ); break;   }

XML Comment

https://docs.microsoft.com/zh-tw/dotnet/csharp/codedoc

陣列 Array

陣列為一個同資料型態的集合,由0開始。 像是字串/整數 string[] strArr={"a","b"}; int[] intArr= new int[2]; 優點: 整個陣列都是為同一型態,當指定錯誤的型態會不能編譯。 缺點: 陣列的大小在初始化過後無法擴張,           而且只能用索引來設置與取得陣列中的值 如strArr[1]           可能會導致索引超過拋出錯誤的現象(寫for迴圈沒設定好超過)

out c# 多個參數

out是將記憶體位置傳過去, 看到以下例子,我們可以發現我們在main方法裡面,並沒有指派 i和j的值,但是呼叫了ccc方法,把i和j的變數在記憶體存放的位置傳過去,該方法把該記憶體位置存放改成rr和ee ,所以當我們print時,發現可以得到值   class Program     {         static void Main(string[] args)         {             string i,j;             ccc(out i,out j);             Console.WriteLine(j);  //輸出rr             Console.WriteLine(i);  //輸出ee                       Console.ReadLine();         }         public static void ccc(out string i,out string j){             i = "rr";             j = "ee";         }     }

Parse 和 TryParse 用法與區別

現實中拿到的幾乎都是字串,所以如何將字串拿來使用和運算等,就需要靠Parse。             string strNum1 = "11";             string strNum2 = "22";             int sum = strNum1 + strNum2; //我們想把兩個數字相加,但兩者都是字串不能加  經過Parse調整就可以了!!!!!!!!!             string strNum1 = "11";             string strNum2 = "22";             int sum =int.Parse(strNum1) + int.Parse(strNum2);             Console.WriteLine(sum); //得到33 其他像是DateTime/double/float/short/ushort等等,都能夠用Parse!!!!!!!!!!!!超好用!! ___________________________________________________________________________ 至於tryParse的出現,就是因為可能有人會亂輸入值,例如給你             string strNum1 = " 11bbbb ";             string strNum2 = "22";             int sum =int.Parse(strNum1) + int.Pa...

Cast 和 Convert 的區別 c#

1. Cast是指同類型的轉換,例如數字類型互相轉換,int ->double 分為兩種 1.implicit  : 從小轉成大 我們都知道int為32bit,而double為64bit,如果把int轉乘double,則沒有影響,因為double可以存int不會失去掉任何東西          int major = 5;          double i = major; 2.explicit  :  從大轉成小 如果相反從double要轉成int,這時候就會發生漏失資訊的事情           double major = 5.55; int i = major; //會提示說不能implicit轉換,只能用explicit轉換 因為會漏失資訊,上面的例子會把.55給遺失掉,只會得到5 如果是在需要比較精密的系統,財務系統之類的,漏掉這.55可能就不得了了 所以會提示要你自己來轉換,讓你自己知道這會造成遺漏 至於要如何explicit轉換呢? 請在要轉換的數字前面加上 括號裡面放要轉的型態   (int) 延續上面的例子 double major = 5.55; int i = (int)major; 以上就不會報錯了 ___________________________________________________________ 2.Convert則為不同類型的轉換,例如把int轉換成string,其實也能支持同類型的轉換 如int轉成double,只支援小->大 如果你寫 int i =1; string s = (string) i; //這時候會報錯 會提示不能夠把int轉換成string 不能像上面一樣強制轉換 double變int 這時候就需要用到Convert類別 他裡面有很多方法,可以進行各種轉換 int i = 1; string s = Convert.ToString(i);  //成功!~~~(灑花) 我們可以發現flo...

Nullable types / Null Coalescing Operator

在c#分為兩種型態 1.Value  ex:int     預設為0 2.Reference  ex:string  預設為null 但有時候Value也需要設置為null,因為在資料庫中設任何的型態,都可以為null 那如何將value type設置為null呢 答案: 在型態後加一個問號  int? i = null; 以下的areYouMajor的bool被弄成bool?型態,所以他除了true/false外,還多了一個null的可能 class Program     {         static void Main(string[] args)         {             bool? areYouMajor = null;             if (areYouMajor == true)             {                 Console.WriteLine("t");             }             else if (areYouMajor == false)             {                 Console.WriteLine("f");             }             else ...

C#運算子 || && ?:

1.&& || 短路運算子 if(a= = 1 || b= =2) { //如果a= =1成立就會執行,不會再去判斷b = =2 } if(a= = 1 && b= =2) { //如果a= =1不成立就不會執行,不會再去判斷b = =2 } 2.當A||B A條件成立就不會再判斷B 3. ?:  運算子 在問號前的條件成立的話 就是得到冒號左邊的結果,反之則右邊的結果 int i=5; bool equal = i==5 ? true : false;  int i = 1;             int tt=i == 1 ? 1 : 0;             Console.WriteLine(tt);             Console.ReadLine(); ?:可以在右邊設置各種型態   int i = 1;             string tt=i == 1 ? "1" : "0";             Console.WriteLine(tt);             Console.ReadLine();

escape sentence and VerBatim literal

當字串中包含一些已有特殊意義的符號時,例如雙引號,雙引號已經被定義為刮在字串旁邊 ,若你在雙引號裡面又加了",但你又想讓它呈現出來,像是你想顯示"hello world", 你可以有兩種選擇 1.escape sequence逃脫字元 string str ="\"hello word\""; 如果寫 string ""hello world""會報錯,所以用\符號來逃脫 以下是官方的文件 https://docs.microsoft.com/en-us/cpp/c-language/escape-sequences?view=vs-2017 2.VerBatim literal 其實第一種方法可用,但可讀性比較不好,第二種方法是在字串前面加上@符號 這樣compiler就會把這串當成都是一般的字沒特殊含義! 但雙引號比較特殊,在這用法還是得用兩個雙引號   string s = @"""hello world"""; 請參考:https://stackoverflow.com/questions/17168961/how-do-i-escape-in-verbatim-string

c# 整數 浮點數

1.整數: 以下可包含數字從小大到,看你用到的數字大小來指派,例如人類的身高  byte(0-255)就可以 用類型.MinValue(MaxValue)可以看出該型態最大最小極限,例如int.MaxValue sbyte      8    - byte       8    + char     16    unicode char short    16    - ushort  16   + int        32    - uint      32    + long     64     - ulong   64    + 2.浮點數型態: (存小數)           精準度 float       7 bit        +- double    15-16bit  +-

關於命名空間 namespace

NameSpace is collection of classes. A namespace is used to organize your code and it collection of classes,interface, structs,enums and delegate. 同一個命名空間的類別之間,不用using可以互相呼叫。 若呼叫不同命名空間的類別,則需要用using關鍵字,或者直接寫全名。 1.  Using System;  Console.Write("test"); 2. System.Console.Write("test") 若沒有命名空間則在同一專案內可以隨意呼叫,但這樣的缺點是如果專案很大,類別很多,要用的時候就會提示很多東西出來,還要挑選,而且不能有同樣名稱的類別,一個命名空間的類別名是不能夠重複的。 如要就是要分兩個命名空間,就像是兩間不同的公司可以有兩個人相同的工號

在visual studio 2013裡面如何把網頁變成專案

在visual studio 2013裡面如何把網頁變成專案?在最上面專案的選單最後一個選項"轉換成web應用程式",之後按一按,就會新增一些專案需要的檔案,之後關閉整個專案,他就會問你說sln要不要存,這時候選擇存,關閉後,重開,發現專案有多一個sln檔案 就能開啦! 來源:https://dotblogs.com.tw/mis2000lab/2014/04/07/vs2013_converting_website_to_webapplication_project

"LC.exe" exited with code -1

Solution: 把專案中的license.licx刪掉,在嘗試重新編譯