佇列(Queue) ,堆疊(Stack)

2014年10月30日 星期四

佇列(Queue)是用先進先出的方式處理物件的集合,例如到銀行排隊,先排的人先處理;而堆疊(Stack )是後進先出的集合,例如玩撲克牌排遊戲時,發牌時是從整疊的最上一張拿取。

                佇列(Queue)常用的方法如下
                名稱 說明
                Count 取得佇列中目前的項目數量
                Dequeue 從佇列前端取出一個項目,同時將其移除
                Enqueue 從佇列尾端加入一個項目
                Peek 從佇列前端取出一個項目,但不移除          
           
                堆疊(Stack)常用的方法如下
                名稱 說明
                Count 取得堆疊中目前的項目數量
                Pop 從堆疊最頂端取出一個項目,同時將其移除
                Push 從堆疊最頂端加入一個項目
                Peek 從堆疊最頂端取出一個項目,但不移除

Queue用法

 
Queue myQueue = new Queue();
myQueue.Enqueue("第一項");
myQueue.Enqueue("第二項");
myQueue.Enqueue("第三項");
myQueue.Enqueue("第四項");

Console.WriteLine("Queue");
while (myQueue.Count > 0)
{
    Console.WriteLine(myQueue.Dequeue());
}
Stack用法
 
Stack myStack = new Stack();
myStack.Push("第一項");
myStack.Push("第二項");
myStack.Push("第三項");
myStack.Push("第四項");

while (myStack.Count > 0) 
{
    Console.WriteLine(myStack.Pop());
}
結果如下:

Read more...

Object doesn't support property or method 'toLowerCase' in IE8

2014年10月14日 星期二

在IE8裡,若型態不是string的話,轉小寫時會發生錯誤


解法:

testObj.toString().toLowerCase();

這樣就ok啦

Read more...

Procedure傳入array參數範例 in Oracle

2014年10月6日 星期一

以下為Procedure傳入array參數範例:
Procedure部份

create or replace PACKAGE  PKG_TEST AS
TYPE NUMBER_ARRAY IS TABLE OF number INDEX BY BINARY_INTEGER;
TYPE STRING_ARRAY IS TABLE OF VARCHAR(200) INDEX BY BINARY_INTEGER;

 procedure GET_ORDERLIST
 (
  P_ORDERLISTID in PKG_TEST.STRING_ARRAY,
  P_RETURNCURSOR OUT SYS_REFCURSOR
 );

/

 procedure GET_ORDERLIST
 (
   P_ORDERLISTID in PKG_TEST.STRING_ARRAY,
   P_RETURNCURSOR OUT SYS_REFCURSOR
 ) as
    varSQL varchar(4000) := '';
    var_OrderIds string(4000) := '''0''';
   begin   
  
  for i in P_ORDERLISTID.first .. P_ORDERLISTID.last loop
   var_OrderIds := var_OrderIds || ',''' ||  P_ORDERLISTID(i) || '''';
  end loop;

  varSQL := 'select * from Order where orderid  in (' || var_OrderIds || ')';

  DBMS_OUTPUT.PUT_LINE(varSQL);
  OPEN P_RETURNCURSOR FOR varSQL;

 end GET_ORDERLIST;

end PKG_TEST

/


C#程式部份

public List GetOrderList(List theSearchList)
{
 var oracleCommand = new OracleCommand();
 oracleCommand.Connection = (OracleConnection)command.Connection;
 oracleCommand.CommandType = CommandType.StoredProcedure;
 oracleCommand.CommandText = "PKG_TEST.GET_ORDERLIST";

 var arryIds = new OracleParameter
 {
  ParameterName = "@P_ORDERLISTID",
  OracleDbType = OracleDbType.Varchar2,
  CollectionType = OracleCollectionType.PLSQLAssociativeArray,
  Value = theSearchList.ToArray(),
  Size = theSearchList.Count(),
  Direction = ParameterDirection.Input
 };
 oracleCommand.Parameters.Add(arryIds);
 oracleCommand.Parameters.Add("@P_RETURNCURSOR", OracleDbType.RefCursor, ParameterDirection.Output);
 oracleCommand.ExecuteNonQuery();

 var dataReader = ((OracleRefCursor)oracleCommand.Parameters["@P_RETURNCURSOR"].Value).GetDataReader();

 var ListDto = new List();

 while (dataReader.Read())
 {
  var dto = new MollyBetOrderBetDto();
  if (!dataReader["orderid"].Equals(DBNull.Value)) dto.OrderID = dataReader["orderid"].ToString();
  if (!dataReader["price"].Equals(DBNull.Value)) dto.Price = Convert.ToDecimal(dataReader["price"]);
  ListDto.Add(dto);
 }

 #region CloseAndDisposeReaderAndCommand
 if (!dataReader.IsNull())
 {
  dataReader.Close();
  dataReader.Dispose();
 }
 oracleCommand.Connection.Close();
 oracleCommand.Connection.Dispose();
 if (!oracleCommand.IsNull())
  oracleCommand.Dispose();
 #endregion
 
 return ListDto;
}

遇到如果需要傳入空array可參考
https://community.oracle.com/message/4126678#4126678
https://community.oracle.com/thread/1000596
http://docs.oracle.com/html/E15167_01/OracleParameterClass.htm#i1012269

Read more...

遇到的Oracle錯誤訊息筆記

2014年10月2日 星期四


錯誤訊息為:
--------------------------------------------------------------------------------------------------------------------------
ORA-00911:invalid character (字元無效)
--------------------------------------------------------------------------------------------------------------------------
00911. 00000 -  "invalid character"
*Cause:    identifiers may not start with any ASCII character other than
           letters and numbers.  $#_ are also allowed after the first
           character.  Identifiers enclosed by doublequotes may contain
           any character other than a doublequote.  Alternative quotes
           (q'#...#') cannot use spaces, tabs, or carriage returns as
           delimiters.  For all other contexts, consult the SQL Language
           Reference Manual.

查到的原因為我在串SQL字串裡,有加逗號,只要把逗號去掉即合;
例:
錯誤
varSQL := 'select * from log ;';
正確
varSQL :='select * from log';


--------------------------------------------------------------------------------------------------------------------------
PLS-00306: wrong number or types of arguments
--------------------------------------------------------------------------------------------------------------------------
最近在Call Procedure,有發生以下的問題,請注意程式給的Parameters參數是否跟Procedure裡面定義的一樣,有時候不小心沒注意到就會發生錯誤,這要注意一下。

錯誤訊息:
 System.Exception: ORA-06550: line 1, column 7: PLS-00306: wrong number or types of arguments in call to 'ICS_USER_PAUSE' ORA-06550: line 1, column 7: PL/SQL: Statement ignored

例: SQL
 procedure GET_ORDERLIST
 (
  P_ORDERLISTID in PKG_TEST.STRING_ARRAY,
  P_RETURNCURSOR OUT SYS_REFCURSOR
 );
程式
var oracleCommand = new OracleCommand();
 oracleCommand.Connection = (OracleConnection)command.Connection;
 oracleCommand.CommandType = CommandType.StoredProcedure;
 oracleCommand.CommandText = "PKG_TEST.GET_ORDERLIST";

 var arryIds = new OracleParameter
 {
  ParameterName = "@P_ORDERLISTID",
  OracleDbType = OracleDbType.Varchar2,
  CollectionType = OracleCollectionType.PLSQLAssociativeArray,
  Value = theSearchList.ToArray(),
  Size = theSearchList.Count(),
  Direction = ParameterDirection.Input
 };
 //Parameters一定要跟Procedure一樣才不會出錯喔
 oracleCommand.Parameters.Add(arryIds);   
 oracleCommand.Parameters.Add("@P_RETURNCURSOR", OracleDbType.RefCursor, ParameterDirection.Output);
 oracleCommand.ExecuteNonQuery();
--------------------------------------------------------------------------------------------------------------------------
ORA-06550:第1行,第7個欄位
--------------------------------------------------------------------------------------------------------------------------
PL/SQL: Statement ignored
原來是我把回傳的int型態給為回傳cursor型態,所以才會造成這樣的錯誤。
解決方法:
將cursor回傳型態改為int32型態即可。
另外也有可能是Store Procdeure沒有權限,所以也要檢查一下喔。

Read more...

foreach裡有條件之改寫

2014年10月1日 星期三

利用lambda改寫可讓原來的程式更為精簡,請看以下的範例 原來寫法

var result = CacheService.Current.GetAllMarketType();
var entities = new List();
if (result != null)
{
 // Make up model data from service return.
 foreach (MarketType marketType in result)
 {
  if (marketType.Status != MarketTypeStatus.DELETED)
  {
   entities.Add(
    new MarketTypeEntity(marketType)
    {
     Id = marketType.id,
     From = marketType.From,
     To = marketType.To,
     Interval = marketType.Interval,
     MaximumRange = marketType.maximumRange,
     MinimumRange = marketType.minimumRange,
     Status = marketType.Status
    });
  }
 }
}

用lambda可改為

var result = CacheService.Current.GetAllMarketType();
var entities = new List();
if (result != null)
{
  entities.AddRange(
  result.Where(o => o.Status != MarketTypeStatus.DELETED)
  .Select(marketType => new MarketTypeEntity(marketType)
  {
   Id = marketType.MarketTypeId,
   From = marketType.From,
   To = marketType.To,
   Interval = marketType.Interval,
   MaximumRange = marketType.maximumRange,
   MinimumRange = marketType.minimumRange,
   Status = marketType.Status
  })
 );
}

Read more...

JavaScript OO寫法

2014年9月18日 星期四

剛開始寫JavaScitp時,通常宣告方法都是用function XXX(){},如果頁面功能很簡單應該是不太會有問題, 當如果遇到頁面include很多支js時,可能會跟別人取到同樣的命名,這時候就可以用以下做法來解決。

var EHS ={
  objVal:{s1:"", s2:""},
  
  openComputer : function  (){
    EHS.objVal.s1="open";
    alert("open");
    
  },
  closeComputer :function  (){
    EHS.objVal.s2="close";
    alert("close");
  },
  showEHS:function(){
    alert(EHS.objVal.s1 + "\n"+ EHS.objVal.s2);
  }
};
呼叫時的用法
EHS.openComputer();
EHS.closeComputer();
EHS.showEHS();

Read more...

Oracle decode用法

2014年9月16日 星期二

decode用法如下
select decode(3,1,'a',2,'b',3,'c','f') from dual;
結果為:c

與switch case概念相同
switch(3)
{
  case: 1
    console.write("a");
    break;
  case: 2
    console.write("b");
    break;
  case: 3
    console.write("c");
    break;
  default:
    console.write("f");
    break;
}


Read more...

Oracle SQL Developer新增欄位方法


新增欄位方法

Step1.在Table上按右鍵

Step2.新增按鍵,新增完成後按下ok即完成


Step3.若要提供Script給DBA, 可點選DDL可查看Script語法









Read more...

2014年9月15日 星期一

Full Page Screen Capture
可以卡整個網頁的圖

https://chrome.google.com/webstore/detail/full-page-screen-capture/fdpohaocaechififmbbbbbknoalclacl/related


Window Resizer
有預設Size可以選擇調整
https://chrome.google.com/webstore/detail/window-resizer/kkelicaakdanhinjdeammmilcgefonfh?hl=en

JavaScript Errors Notifier Tell You Where JS Error
JS偵錯工具
https://chrome.google.com/webstore/detail/javascript-errors-notifie/jafmfknfnkoekkdocjiaipcnmkklaajd?hl=en


未完待補....

Read more...

DDL、DML、DCL、DQL定義

DDL、DML、DCL、DQL

資料定義語言:
DDL(Data Definition Language)
用來定義資料庫、資料表、檢視表、索引、預存程序、觸發程序、函數等資料庫物件。
可以用來建立、更新、刪除 table,schema,domain,index,view
常見的指令有:
CREATE 建立資料庫的物件
ALTER 變更資料庫的物件
DROP 刪除資料庫的物件

資料操作語言:
DML(Data Manipulation Language)
用來處理資料表裡的資料。
常見的指令有:
INSERT 新增資料到資料表中
UPDATE 更改資料表中的資料
DELETE 刪除資料表中的資料

資料控制語言:
DCL(Data Control Language)
用來控制資料表、檢視表之存取權限,提供資料庫的安全性。
常見的指令有:
GRANT 賦予使用者使用權限
REVOKE 取消使用者的使用權限
COMMIT 完成交易作業
ROLLBACK 交易作業異常,將已變動的資料回復到交易開始的狀態

資料查詢語言:
DQL(Data Query Language)
負責進行資料查詢,不會對資料本身進行修改的語句
用來查詢資料表裡的資料。
指令只有一個:
SELECT 選取資料庫中的資料
各類輔助指令:SELECT,FROM,WHERE,GROUP BY,ORDER BY

用來定義資料庫、資料表、檢視表、索引、預存程序、觸發程序、函數等資料庫物件。常見的指令有:
CREATE 建立資料庫的物件
ALTER 變更資料庫的物件
DROP 刪除資料庫的物件

Read more...

常用VS Extensions工具


Indent Guides
虛線讓程式更容易閱讀
http://visualstudiogallery.msdn.microsoft.com/e792686d-542b-474a-8c55-630980e72c30

VSCommands for Visual Studio
搬移或刪除檔案會出現confirm視窗
http://visualstudiogallery.msdn.microsoft.com/a83505c6-77b3-44a6-b53b-73d77cba84c8

Javascript Parser 
存檔時自動檢查是否有javascript錯誤
http://visualstudiogallery.msdn.microsoft.com/288a2b0f-1357-47b4-8215-1134c36bdf30

Web Essentials 2012
If you ever write CSS, HTML, JavaScript, TypeScript, CoffeeScript or LESS, then you will find many useful features that make your life as a developer easier.
http://visualstudiogallery.msdn.microsoft.com/07d54d12-7133-4e15-becb-6f451ea3bea6



未完待補....

Read more...

%TYPE Attribute 用法

2014年9月4日 星期四

在create Procedure 或是temp table時
新增的欄位型態可參考,已存在的欄位

範例:

create producre  spx_test
(
/*參考Event(table).EventID(Column)的欄位型態
      若Event.EventID型態為NUMBER(8,0),則SPX的EventID就為eventID
 欄位型態會隨著Event.EventID而動態改戀
*/
  eventID in   Event.EventID%TYPE,
  Name in VRCHAR2(1000,BYTE)

)


參考來源:
http://docs.oracle.com/cd/B19306_01/appdev.102/b14261/fundamentals.htm#i6080

Read more...

Remote Desktop Connection Manager 管理遠端好幫手

2014年8月17日 星期日


常用Remote的人,常常會因為要記錄遠端資訊ip、帳號、密碼,用了這套可以幫你記錄所有的資訊進中管理,讓工作更有效率,而且現在是免費的


image
下載:
http://www.microsoft.com/en-us/download/details.aspx?id=21101

Read more...

SQL BULK INSERT

2014年8月5日 星期二

情境:來源資料為txt檔,要利用這些資料做處理,例(select,update)

由於sql用 in有1000筆的限制,這時就可以用bulk insert 方法來處理。

取到之後就可以做應用啦。

請注意:檔案路徑是sql那台機器的路徑喔,檔案格式也一定要是Unicode,才不會出現亂碼喔。

create table #temp1
(col1 nvarchar(max))

bulk insert #temp1
from 'd:\temp\test.txt'
with (fieldterminator=',',rowterminator='\n')
go

select * from #temp1
drop table #temp1


image



參考:http://beyondrelational.com/modules/2/blogs/70/posts/10891/bulk-insert-to-table-with-specific-columns.aspx



MSDN:http://msdn.microsoft.com/zh-tw/library/ms175915.aspx

Read more...

TFS修改比對工具為WinMarge

2014年6月23日 星期一

 

注意事項:需要先下載WinMarge工具。

下載位址:http://winmerge.org/downloads/

修改TFS比對工具步驟如下:

Step1.

Step1

Step2.

Step2

Step3.

Step3

引數請輸入:/x /e /ub /wl /dl %6 /dr %7 %1 %2

就大工告成囉,之後用比較就會開始WinMarge工具來進行比對囉。

Read more...

正規式-取得圖片來源

2014年5月29日 星期四

 

取出圖片來源方式

string regular1 = "<img.+?src=[\"'](.+?)[\"'].*?>";
foreach (Match item in Regex.Matches(str, regular1))
{
string name = item.Groups[1].Value;
}

參考來源:

http://stackoverflow.com/questions/4257359/regular-expression-to-get-the-src-of-images-in-c-sharp



線上測試網站:



http://www.regexr.com/

Read more...

日期轉換ToString()參數說明

2014年4月21日 星期一

日期轉換成文字格式時,需注意事項:

參數大小寫解譯不同 MM=month, mm=Minutes, HH=24hours, hh=12hours

日期格式:2014-04-22 下午 04:00:00

 

DateTime d = DateTime.Now;
//hh:12小時制
string printDateTime = d.ToString("yyyy-MM-dd hh:mm:ss");
//輸出格式 2014-04-22 04:00:00


//HH:24小時制
string printDateTime1 = d.ToString("yyyy-MM-dd HH:mm:ss");
//輸出格式 2014-04-22 16:00:00


 



參考


http://msdn.microsoft.com/zh-tw/library/8kb3ddd4(v=vs.110).aspx

http://msdn.microsoft.com/zh-tw/library/zdtaw1bw(v=vs.110).aspx

Read more...

Linq偵錯方式

2014年2月14日 星期五

linq 裡也可以寫funciton來表示

原寫法,當資料有問題則直接出錯

 

List<Order> order = GetAllOrderList();

order = order.Where(o=>o.status.Equals(1) && o.paymentStatus.Equals(1));


如果要查哪筆資料出錯可以用以下寫法



List<Order> orderList = GetAllOrderList();

orderList = orderList.Where(o=>
{
var hasHit =false;
try
{
hasHit = o.status == "NCCC" && o.paymentStatus ==1;
}
catch(Exception ex)
{
var error = o.id;
var err = ex.Message;
}
}).ToList();


等於方式用”Equals”時要很小心,物件一定要有值才不會出錯



所以我改成用==方式來處理就沒這麼問題了



利用function寫法可以讓錯誤更容易偵錯喔。

Read more...

使用FileStream開啟檔案時發生存取被拒

2014年1月8日 星期三

在做圖片查詢時遇到存取被拒

語法如下:

string path="xxx"; //檔案路徑
using(FileStream fsm = new FileStream(path,FileMode.Open))
{


}


如果只要查詢建議將屬性設定要唯讀



string path="xxx"; //檔案路徑
using(FileStream fsm = new FileStream(path,FileMode.Open,FileAccess.Read))
{


}


參考來源:



http://msdn.microsoft.com/zh-tw/library/b6fz1x84(v=vs.110).aspx

Read more...