2013-10-02 33 views
0

我有一個select stement,我使用SQL的ExecuteNonQuery()屬性返回受影響的行數。但是,這總是返回-1。我做了研究並實現了它的SQL的SETNOCOUN ON屬性的結果。請問我如何將它從查詢中刪除,因爲我沒有使用存儲過程?以下是我的代碼。如何從sql查詢中設置SETNOCOUNTOFF

protected void txtName_Changed(object sender, EventArgs e) 
     { 
      string sql = ""; 

      using (SqlCommand cmd = connection.CreateCommand()) 
      { 
       sql = "SET NOCOUNT OFF;SELECT * FROM [CLIENT] WHERE cname = '" + txtName.Text + "'"; 
       cmd.Connection = connection; 
       cmd.CommandType = CommandType.Text; 
       cmd.CommandText = sql; 
       connection.Open(); 
       int i = cmd.ExecuteNonQuery(); 
       if (i > 0) 
       { 
        txtName.BackColor = System.Drawing.ColorTranslator.FromHtml("#FD5E53"); 
        txtName.BorderColor = System.Drawing.ColorTranslator.FromHtml("#CD4A4A"); 

        lblError.Text = "Client Exist."; 
        lblError.Visible = true; 
        lblError.Enabled = true; 
        btnInsertClient.Enabled = false; 
        pnlAddEdit_ModalPopupExtender.Show(); 
        // return; 
       } 
       else 
       { 
        txtName.BackColor = System.Drawing.ColorTranslator.FromHtml("#F2F0E1"); 
        txtName.BorderColor = System.Drawing.ColorTranslator.FromHtml("#FFFFFF"); 

        lblError.Text = ""; 
        lblError.Visible = false; 
        lblError.Enabled = false; 
        btnInsertClient.Enabled = true; 
        pnlAddEdit_ModalPopupExtender.Show(); 
       } 
       connection.Close(); 

      } 
     } 

回答

1

不要使用Execute**Non**Query()

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

嘗試ExecuteScalar()例如:

執行查詢,並在查詢返回的結果集返回第一行的第一列。

然後讓您的查詢爲COUNT()

哦,注意SQL注入和重複代碼。

+0

謝謝你的男人。但是,當我使用執行標準,我看到它返回一個超出推理的數字。我有些困惑。它投到int時實際返回什麼? –

+0

它返回_「查詢返回的結果集中第一行的第一列」_。 – CodeCaster