2017年1月25日 星期三

return中使用條件運算子? :

return 條件 ? true : false

如下述範例,當 a > b 時,回傳為a,當 a < = b 時,回傳為b + 1
return a > b ? a : b + 1

也可加入括弧,使其表示的更清楚
return (a > b) ? a : (b + 1)

以下引用微軟的說明文件
條件式運算子 (? :) 是一種三元運算子 (它會採用三個運算元)。 條件運算子運作方式如下:

  • 第一個運算元(條件)會隱含轉換成 bool。 接著會對它進行評估,並且完成所有副作用,再繼續執行。
  • 如果第一個運算元判斷值為 true (1),就會評估第二個運算元。
  • 如果第一個運算元判斷值為 false (0),則會評估第三個運算元。

2017年1月23日 星期一

使用HTTP Method,遇到ErrorCode10013,無法連接至遠端伺服器問題

工作內容原本是在舊的專案中加入簡單的http post功能。

結果不管用webrequest或httpwebrequest都無法連接到已經架好的網站。

一直出現以下的錯誤訊息(部份)
HResult=-2146233088
Message=傳送要求時發生錯誤。
Source=mscorlib
......
InnerException: 
     HResult=-2146233079
     Message=無法連接至遠端伺服器
     Source=System
     ......
          ErrorCode=10013
          HResult=-2147467259
          Message=嘗試存取通訊端被拒絕,因為存取權限不足。
          NativeErrorCode=100
          Source=System
          ......

也把測試網址改為Google或Yahoo,問題依舊發生了。

找了兩天類似問題的相關資料,都無法解決此問題後。

就試著開新專案寫http post的程式,看是否與電腦環境有關係。
結果測試後發現
  1. 在以前開的C# console application專案中,該程式碼可以正常執行。
  2. 而在新建立的專案中,則也出現一樣的問題。
然後靈機一動,把原本的http網址,改為https就可以執行了!

EX:網址為 http://www.google.com.tw/ 改為 https://www.google.com.tw/

最後還是不知道問題在哪裡,不過我猜測應該是因為該網站架在雲端上。

所以在不使用https的情況下,相關的http method功能就被該雲端的防火牆擋掉。

2017年1月18日 星期三

建立cmd捷徑後,直接執行指令

右鍵新增捷徑後,項目位置輸入cmd.exe。
然後右鍵點選捷徑,開啟內容。
在目標欄位加上指令。

例如:
C:\Windows\System32\cmd.exe /C dir
C:\Windows\System32\cmd.exe /K dir
C:\Windows\System32\cmd.exe /C shutdown.exe -s -t 15000
/C dir 是執行完dir命令後,關閉命令視窗。
/K dir 是執行完dir命令後,不關閉命令視窗。
/C shutdown.exe -s -t 15000 是執行排程五小時後自動關機,關閉命令視窗。 

PS:相關指令的說明,網路上都找的到,在此就不記錄了!

2017年1月17日 星期二

C# 使用ODBC呼叫Stored Procedures(SQLServer與Sybase)

下列cmdSqlStr為SQL字串,oODBCConnection為連線資料庫資料

Sybase
{call Procedure ID,'Name','Data',number}

SQLServer
{call Procedure(ID,'Name','Data',number)}

呼叫Stored Procedures
command = new OdbcCommand(cmdSqlStr, oODBCConnection);
oODBCConnection.Open();
reader = command.ExecuteReader();

2017年1月11日 星期三

C# foreach跳到下次迴圈

在符合條件的時候,程式不需繼續往下執行,直接跑下一筆資料

foreach (var i in test)
{
 if (符合條件)
  {   
    continue;
    //跳過當前循環體中的當次迴圈(i),進入(i+1),並繼續執行迴圈外的程式
    
    //break:直接跳出迴圈後,會繼續執行迴圈外的程式
    //return:直接跳出結束那個函式,不會繼續執行迴圈外的程式
  }
}

2016年12月14日 星期三

關於Attribute Routing,使用正則表示式排除特定字串

MVC架構下,使用Attribute Routing時,遇到要使用正則表示式排除有特定字串的Route。

當Model中使用  [RoutePrefix("{Type:regex(Apple|Pen)}")] 

表示當Route為ApplePen的時候,就會進入此Model
EX(http://localhost:XXXX/Apple或http://localhost:XXXX/Pen)

Type:regex(可以使用正則表示式來設定想要的字串內容)
  1. ^((?!特定字串).)*$
  2. ^(.(?<!特定字串))*$ 
      例如:^((?!Apple).)*$,只會取得不包含"Apple"的字串。

合起來使用就可以達到反效果,表示當Route中不含ApplePen的時候,就會進入此Model
EX:[RoutePrefix("{Type:regex( ^((?!Apple|).Pen)*$)}")]

--------------------------------------------------------------------------------------------------------------------------
這邊順帶做個筆記,範例:(http://localhost:XXXX/Sample/TestString123/456/789/123)

[RoutePrefix("Sample")]
[Route("TestString{Command}/{*pathInfo}")]

TestString為設定的特定字串,這樣就可以取得Command的值,此為123。
pathInfo可取得後續所有Route,此為456/789/123。

2016年11月23日 星期三

JavaScript如何取得Select選項中的値

在變數sampleValue中取得Select目前選項的Value

<!DOCTYPE html>
<html>
<body>

<select id="sample">
  <option>Test 1</option>
  <option>Test 2</option>
  <option>Test 3</option>
  <option>Test 4</option>
</select>

<button onclick="myTest()">Try it</button>
<p id="test"></p>

<script>
function myTest() {
    var sampleValue = document.getElementById("sample").value;
    document.getElementById("test").innerHTML = sampleValue;
}
</script>

</body>
</html>