2014-01-23 59 views
0

我正在使用以下代碼來檢查記錄是否存在。查詢在C中總是返回-1#

SqlCommand check_Campaign_Name = new SqlCommand("SELECT * FROM Campaign_Summary WHERE ([Compaign_Name] = @user) ", conn); 
check_Campaign_Name.Parameters.AddWithValue("@user", txtBox_LastClick_Campaign.Text); 

int CampaignExist = check_Campaign_Name.ExecuteNonQuery(); 

richTextBox1.Text = CampaignExist.ToString(); 

但我總是在整數CampaignExist越來越-1。不知道我在哪裏做錯了。

+0

看看這裏的http://計算器。com/questions/4269548/executenonquery-for-select-sql-statement-returning-no-rows – Plue

+0

你確定你的查詢本身是正確的嗎?SELECT * FROM Campaign_Summary WHERE([Compaign_Name] = @user)'?請先用'@ user'替換真正的用戶名進行測試。 –

+1

你在查詢中寫了'[Compaign_Name]',不應該是'[Campaign_Name]'? –

回答

6

ExecuteNonQuery不應該返回SELECTED行的數量,而是由一個INSERT/UPDATE改性的行數/ DELETE命令。您應該使用SqlDataReader並以其財產HasRows檢查或使用聚合函數一樣COUNTExecuteScalar

SqlCommand check_Campaign_Name = new SqlCommand("SELECT COUNT(*) FROM Campaign_Summary " + 
           "WHERE Compaign_Name = @user", conn); 
check_Campaign_Name.Parameters.AddWithValue("@user", txtBox_LastClick_Campaign.Text); 
int rowCount = Convert.ToInt32(check_Campaign_Name.ExecuteScalar()); 

但是,如果你希望(或許,如果你只想取回的行數最好choiche)只有知道該行是否存在,那麼COUNT方法被認爲效率低於使用EXISTS語句。

string cmdText = @"IF EXISTS (SELECT Compaign_Name FROM Campaign_Summary 
        WHERE Compaign_Name = @user) 
        SELECT 1 ELSE SELECT O"; 
SqlCommand check_Campaign_Name = new SqlCommand(cmdText, conn); 
int rowExists = Convert.ToInt32(check_Campaign_Name.ExecuteScalar()); 

第二種方法只是允許知道是否有適合WHERE語句的行。
所以它不完全像COUNT(*)那裏你得到確切的行數。

+0

感謝人......它的工作 – Kamran

1

使用ExecuteScalar方法和查詢

SqlCommand check_Campaign_Name = new SqlCommand("SELECT COUNT(1) FROM Campaign_Summary WHERE ([Compaign_Name] = @user) ", conn); 
check_Campaign_Name.Parameters.AddWithValue("@user", txtBox_LastClick_Campaign.Text); 

int CampaignExist = Convert.ToInt32(check_Campaign_Name.ExecuteScalar()); 

richTextBox1.Text = CampaignExist.ToString(); 
1

MSDN算,

對於UPDATE,INSERT和DELETE語句,返回值是受該命令影響的行數。當插入或更新的表上存在觸發器時,返回值包括受插入或更新操作以及觸發器或觸發器影響的行數影響的行數。對於所有其他類型的語句,返回值爲-1。如果發生回滾,返回值也是-1。

由於您的查詢是提到UPDATEINSERTDELETE s的SELECT,而不是一個,它總是返回-1

1

與嘗試執行標MSDN

int CampaignExist = Convert.ToInt(check_Campaign_Name.ExecuteScalar()); 

SqlCommand check_Campaign_Name = new SqlCommand("SELECT COUNT(1) FROM Campaign_Summary WHERE ([Compaign_Name] = @user) ", conn); 
check_Campaign_Name.Parameters.AddWithValue("@user", txtBox_LastClick_Campaign.Text); 

int CampaignExist = Convert.ToInt32(check_Campaign_Name.ExecuteScalar()); 

richTextBox1.Text = CampaignExist.ToString(); 
0

ExecuteNonQuery不用於檢索結果

您可以使用下列方法之一:

  1. SqlCommand.ExecuteScalar(我寧願這個)

  2. DataAdapter.Fill