2012-12-11 40 views
0

我正在查詢數據,如果數據不存在,我插入它。如果是這樣,我做別的:縮短數據訪問代碼......這會工作嗎?

SqlCommand checkHead = new SqlCommand("SELECT * FROM TABLE WHERE ORDER_NO = '" + orderNo + "';", connection); 
SqlDataReader checkHeadReader = checkHead.ExecuteReader(CommandBehavior.SingleRow); 

if (!checkHeadReader.HasRows) 
{ 
    checkHeadReader.Close(); 
    addHead.ExecuteNonQuery(); 
} 

但我不知道是否有一個更短的方式來編碼?下面的代碼會工作嗎?

SqlCommand checkHead = new SqlCommand("SELECT * FROM TABLE WHERE ORDER_NO = ' + orderNo + "';", connection); 

if(checkHead.ExecuteReader(CommandBehavior.SingleRow).HasRows) 
    addHead.ExecuteNonQuery(); 
else //this order already exists 
    Server.Transfer(@"~/Views/Error.aspx"); 
+6

當您嘗試時發生了什麼? – jrummell

+4

閱讀SQL注入! – RvdK

+2

您需要關閉閱讀器。 – SLaks

回答

3

ExecuteScalar非常適合這一點,例如,

using (SqlCommand cmdCheck = new SqlCommand("Select Count(*) From Table Where Order_No = '" + orderNo + "'", connection)) 
{ 
    int nExists = (int)cmdCheck.ExecuteScalar(); 
    if (nExists==0) addHead.ExecuteNonQuery(); 
} 
+0

-1,因爲沒有回答這個問題。 – RvdK

+1

這實際上是一個簡短的方法來做到這一點,也很整潔,但我想你可以爭辯說有一行缺少addHead。 –

+0

但是第一行不會編譯 – RvdK