2014年9月23日 星期二

[SQL] 練習transaction

webform :

transaction
1.在執行中間有出錯,所有的刪除都會返回原始狀態



  1.   string str1 = @"DELETE LineItem where OrderId = @OrderId;"// SQL command 1
  2.  
  3.             string str2 = @"DELETE OrderStatus where OrderId = @OrderId;"// SQL command 2
  4.  
  5.             string str3 = @"DELETE Orders where OrderId = @OrderId;"// SQL command 2
  6.  
  7.  
  8.             SqlConnection conn = NEW SqlConnection(SqlHelper.ConnectionStringOrderDistributedTransaction);
  9.             SqlCommand delCommand = NEW SqlCommand(str1, conn);
  10.             SqlParameter param = NEW SqlParameter("@OrderId", 2);
  11.             delCommand.Parameters.ADD(param);
  12.  
  13.             conn.OPEN();
  14.             SqlTransaction trans = conn.BeginTransaction();
  15.             delCommand.TRANSACTION = trans;
  16.  
  17.             try
  18.             {
  19.                 delCommand.ExecuteNonQuery();
  20.                 delCommand.CommandText = str2;
  21.                 delCommand.CommandType = CommandType.Text;
  22.                 delCommand.ExecuteNonQuery();
  23.                 delCommand.CommandText = str3;
  24.                 delCommand.CommandType = CommandType.Text;
  25.                 delCommand.ExecuteNonQuery();
  26.  
  27.                 trans.Commit();
  28.             } // try
  29.             catch (Exception excep)
  30.             {
  31.                 trans.ROLLBACK();  // 出現例外就ROLLBACK
  32.                 logger.Debug(excep.Message);
  33.             } // catch
  34.             finally
  35.             {
  36.                 conn.Close();
  37.                 delCommand.Dispose();
  38.                 conn.Dispose();
  39.                 trans.Dispose();
  40.             } // finally



2014年9月13日 星期六

[C#] 執行緒練習

一看就懂


  1.  class Program
  2.     {
  3.         static bool _done;
  4.         private static readonly object _locker = new object();
  5.         static void Main(string[] args)
  6.         {
  7.             /*
  8.             //a.執行序,並指定委派
  9.             Thread t = new Thread(WriteY);
  10.             t.Start();
  11.             //a.同時,do something on the main thread.
  12.             for (int i = 0; i < 1000; i++)
  13.             {
  14.                 Console.Write('x');
  15.             }

  16.             //b.當前執行序名稱
  17.             Console.Write(Thread.CurrentThread.Name);
  18.             */
  19.             /*
  20.             //c.join 等待此執行序結束
  21.             Thread t = new Thread(Go);
  22.             t.Start();
  23.             t.Join();
  24.             //c.休眠 Thread.Sleep(0) Thread.Yield()
  25.             Thread.Sleep(TimeSpan.FromSeconds(5));      //封鎖此執行緒五秒
  26.             Console.WriteLine("Thread  t has ended");
  27.             */
  28.            
  29.             /*
  30.             //d.Shared State  
  31.             //因為兩個執行緒都在同一個實體呼叫GOGO,所以共享_done field,結果就只會顯示一次
  32.             Program tt = new Program();     //create a common instance
  33.             new Thread(tt.GoGo).Start();
  34.             tt.GoGo();
  35.             //d.Lambda 表示式也會產生 Shared State  
  36.             bool done = false;
  37.             ThreadStart action = () =>
  38.             {
  39.                 if (!done)
  40.                 {
  41.                     {
  42.                         done = true;
  43.                         Console.Write("Done");
  44.                     }
  45.                 }
  46.             };
  47.             new Thread(action).Start();
  48.             action();
  49.             */
  50.             /*
  51.             //e.為了避免shared state影響程式
  52.             //  使用lock保護值性序安全性(thread-safe)
  53.             new Thread(LockGo).Start();
  54.             LockGo();
  55.             */
  56.             //f. 變數i都指向同一個same memory location
  57.             for (int i = 0; i < 10; i++)
  58.             {
  59.                 new Thread(() => Console.Write(i)).Start();
  60.             }
  61.             for (int i = 0; i < 10; i++)
  62.             {
  63.                 int temp = i;
  64.                 new Thread(() => Console.Write(temp)).Start();
  65.             }
  66.         }
  67.         static void LockGo()
  68.         {
  69.             //鎖定
  70.             lock (_locker)
  71.             {
  72.                 if (!_done)
  73.                 {   //所以不用擔心執行緒會同時進來,產生兩個Done問題
  74.                     Console.Write("Done");
  75.                     _done = true;
  76.                 }
  77.             }
  78.         }
  79.         private void GoGo()
  80.         {
  81.             //第二個執行緒 因為_done變成true所以沒反應
  82.             if (!_done)
  83.             {
  84.                 _done = true;
  85.                 Console.WriteLine("Done");
  86.             }
  87.             else
  88.             {
  89.                 Console.WriteLine("//第二個執行緒 因為_done變成true所以沒反應");
  90.             }
  91.         }
  92.         private static void Go(object obj)
  93.         {
  94.             for (int i = 0; i < 100; i++)
  95.             {
  96.                 Console.Write('x');
  97.             }
  98.         }
  99.         private static void WriteY(object obj)
  100.         {
  101.             for (int i = 0; i < 1000; i++)
  102.             {
  103.                 Console.Write("y");
  104.             }
  105.         }
  106.     }

2014年8月27日 星期三

[WCF] WebClient post api

用於測試WCF資料,作為客戶端傳送資料到wcf

  1. string data = @"
  2.                    {
  3.                             ""B"" : ""88888888-4444-4444-4444-121212121212"",
  4.                             ""QID"" : ""0610a3ac-4262-4b1b-aa23-3a16edb5c7b3"",
  5.                             ""QID"" : ""1ae67bee-e819-451d-bc20-54dffdf839b8"",
  6.                             ""Anr"" : """",
  7.                             ""Der""  : ""54026fee464f7456"",
  8.                             ""An"" :""1c440ab1-7b00-4dcc-8faa-e1c3f1375eb9""
  9.                    }";
  10.             WebClient webClient = new WebClient();
  11.             webClient.Headers["Content-type"] = "application/json";
  12.             webClient.Encoding = Encoding.UTF8;
  13.             webClient.UploadString("http://localhost:3415/WcfService.svc/TEST", "POST", data);

2014年8月26日 星期二

[sql] order by 按照自己希望排序


  order by
    case
        when c.Name = '單選' then 0
        when c.Name = '複選' then 1
        when c.Name = '問答' then 2
    end

2014年8月20日 星期三

[JS] 定時重新整理 + 停止 + 繼續


當有遇到要將js的 setInternal() 停止再繼續時,請參考下列方式 :

  1. <script type="text/javascript">
  2.         var refresh;
  3.         //定時重新整理的method
  4.         function refreshInterval(){
  5.             refresh = setInterval("ReloadPartialView()", 20000);
  6.         }
  7.  
  8.         //執行
  9.         refreshInterval();
  10.  
  11.         //...
  12.         //當觸發特定條件,停止重整
  13.         clearInternal(refresh);
  14.        
  15.         //...
  16.         //啟動重整
  17.         refreshInterval();
  18. </script>