2013-04-26 92 views
0

當查詢成功時,SQL Server Express會返回代碼嗎?你怎麼能在C#中捕獲這個?SQL成功查詢代碼

謝謝

我有一個按鈕,讓我從一個表中的下10行。我想根據以前的查詢是否成功來繼續使用此按鈕。

+0

顯示代碼,然後我們可以看到。否則它將被關閉 – 2013-04-26 02:30:01

+0

成功,因爲'返回行'或成功,因爲'不會引發錯誤' – 2013-04-26 09:18:03

回答

0

值得注意的是,如果查詢失敗,你將會得到一個異常,所以什麼都不會返回,除非你發現異常,那麼你可以讓它返回任何你喜歡的東西!

我想,也許你所想的ExecuteNonQuery這對於INSERT/UPDATE/DELETE命令將返回受影響的行數(在命令所有語句),或返回-1,如果事務回滾。它不會返回受select語句影響的行數,但這不應該成爲問題,因爲沒有理由使用ExecuteNonQuery來表示SELECT語句。

如果你只是想要的結果的計數返回您可以結合使用COUNT查詢與ExecuteScalar

如果您正在使用SqlDataReader您可以使用HasRows物業,如果它返回行一個布爾值,或者當你正在使用的閱讀器,你可以使用一個計數器返回行的確切數目,例如:

int rowcount = 0; 
bool success = false; 
using (var connection = new SqlConnection("connectionString")) 
using (var command = new SqlCommand("SELECT TOP 10 * FROM Table")) 
{ 
    connection.Open(); 
    using (var reader = command.ExecuteReader()) 
    { 
     success = reader.HasRows; 
     while (reader.Read()) 
     { 
      rowcount++; 
      // DO SOMETHING WITH YOUR DATA 
     } 
    } 
} 

或者,如果你正在使用的SqlDataAdapter可以使用的行數從DataTable獲得成功或任一個布爾值受影響的行數。

using (var adapter = new SqlDataAdapter("SELECT TOP 10 * FROM Table", "connectionString")) 
{ 
    DataTable table = new DataTable(); 
    adapter.Fill(table); 

    bool success = table.Rows.Count > 0; 
    int rows = table.Rows.Count; 

} 
+0

謝謝GarethD。我會拿你的答案,並將其應用於我的代碼。我被告知基於Oracle的數據庫返回一個特定的值,所以我不確定MS SQL Server Express是否做了類似的事情。謝謝各位的意見。 – 2013-04-26 14:40:49

0

不知道如何生成查詢很難告訴你如何做到這一點,但如果你使用SQLDataReader你可以檢查它的HasRows屬性,或者如果你使用的是DataTable,你可以檢查它的行.Count屬性。

+0

我使用連接,命令,然後適配器來填充數據表。我以爲SQL服務器在查詢完成時會返回一個int值,如果是失敗,則返回-1 ... – 2013-04-26 02:04:02

+0

如果它有行,它將返回行。如果沒有,它不會。爲什麼它需要一個返回碼? – Amy 2013-04-26 02:16:14

+0

如果查詢成功執行,我被告知Oracle數據庫返回值爲100;如果不成功則返回-1,SQL表達式做類似的事情嗎? – 2013-04-26 02:52:10