2013-07-25 64 views
1

我試圖通過檢查後端表是否將其中一列設置爲「NO」來使用ExecuteScalar函數。如果其中一列設置爲NO,那麼我想調用SendEmail函數,否則我想調用Delete_Record函數。我的問題是它總是調用Delete_Record函數,並且從不調用SendEmail函數。 Post_ID的數據類型是varchar,我不知道這與這有什麼關係;我似乎無法弄清楚發生了什麼。有人可以幫忙嗎? 這裏是我的代碼:在asp.net中使用ExecuteScalar函數時出現問題

SqlCommand cmd = new SqlCommand("SELECT count(*) from MyTable WHERE Post_ID [email protected]_ID And (Column1='No' OR Column2='No' OR Column3='No')", con); 
    cmd.Parameters.Add("@Post_ID", SqlDbType.VarChar).Value = Post_ID; 
    cmd.Connection = con; 
    con.Open(); 
    Int32 result = (int)cmd.ExecuteScalar(); 

    if (result == 1) 
    { 
     SendEmail(); 
    } 
     else 
    { 
     Delete_Record(); 
    } 
+0

可以多一個嗎?你可以檢查結果值嗎? – Epsilon

+0

如果結果爲0(沒有符合條件的記錄)或大於1(超過1條記錄匹配)會怎麼樣? – shahkalpesh

+3

您是否期待結果正好是'1',可能會有更多記錄滿足您的條件,請設置一個斷點來查看正在返回的內容,或者將您的條件更改爲'(result> = 1)' – Habib

回答

2

,因爲它可能是不止一個,你應該改變你的條件

if (result >= 1) 
    { 
     SendEmail(); 
    } 
     else 
    { 
     Delete_Record(); 
    } 
+0

是的這就是我所做的。多謝你們... – moe

1

正如其他人所說,你可以得到超過1分錄。無論是用 「如果(結果> = 1)」,或嘗試

「選擇從MyTable的WHERE POST_ID = @ POST_ID和(列1 = 'no' 或列2 = 'no' 或欄3 = '沒有' )「

0

試試這個。肯定會工作。

SqlCommand cmd = new SqlCommand("SELECT count(*) from MyTable WHERE Post_ID [email protected]_ID And (Column1='No' OR Column2='No' OR Column3='No')", con); 
    cmd.Parameters.Add("@Post_ID", SqlDbType.VarChar).Value = Post_ID; 
    cmd.Connection = con; 
    con.Open(); 
    SqlDataReader rd=cmd.ExecuteReader() 

    if (rd.Read()) 
    { 
     SendEmail(); 
    } 
     else 
    { 
     Delete_Record(); 
    }