ExecuteNonQuery() 傳回值 問題

來源:互聯網
上載者:User

 

ADO.NET 資料命令使您能夠直接對資料庫或其他資料來源執行命令,而不需要資料集或資料配接器。有關更多資訊,請參見

Visual Studio 中的 DataCommand 對象介紹。

1.
可針對資料庫執行的某些類型的資料命令除了返回一個指出命令成功的值以外不返回任何值。這些命令類型包括:

  • 資料庫定義 (DDL) 命令,用於建立和管理資料庫結構(如表和預存程序)。
  • 更新命令(“更新”(Update)、“插入”(Insert) 和“刪除”(Delete) 語句)。

必須使用資料庫命令執行 DDL 操作;沒有其他方法可以在 ADO.NET 中執行這些任務。

如果正在使用資料集,則不需要使用單獨的資料命令執行資料庫更新。而是使用資料配接器更新資料庫。有關更多資訊,請參見

Visual Studio .NET 中的資料集更新。但是,如果使用的不是資料集,則可以直接向資料庫發送更新命令。有關資料集相對於資料命令的優點的更多資訊,請參見資料存取原則建議。

對於這兩種類型的命令,命令都返回一個整數指示操作的成功與否。傳回值因是要更新記錄還是發出 DDL 命令而異:

  • 如果要建立或修改資料庫結構,當操作成功時傳回值為 -1。
  • 如果要更新記錄,則傳回值指示受到該操作影響的記錄數。

在兩種情況下,如果操作失敗,命令都返回零。

                                                  
注意 ExecuteNonQuery() 傳回值 問題

前些日子作一些資料項目的時候 在ADO.NET 中處理 ExecuteNonQuery()方法時,總是通過判斷其傳回值是否大於0來判斷操作時候成功 。但是實際上並不是這樣的,好在處理的資料操作多時 修改, 插入, 刪除,否則的話問題就有點打了,都是些基礎的知識,但是很重要個人覺得有必要記下來。
    ExecuteNonQuery()方法主要使用者更新資料,通常它使用Update,Insert,Delete語句來操作資料庫,其方法傳回值意義:對於 Update,Insert,Delete 語句 執行成功是傳回值為該命令所影響的行數,如果影響的行數為0時返回的值為0,如果資料操作復原得話傳回值為-1,對於這種更新操作 用我們平時所用的是否大於0的判斷操作應該沒有問題而且比較好,但是對於其他的操作如對資料庫結構的操作,如果操作成功時返回的卻是-1,這種情況跟我們平時的思維方式有點差距所以應該好好的注意了,例如對資料庫共添加一個資料表的Create操作,當建立資料表成功時返回-1,如果操作失敗的話(如資料表已經存在)往往會發生異常,所以執行這種操作時最好用try--catch--語句來容錯。
例如用ExecuteNonQuery()方法執行create和alter操作
    SqlConnection conn = new SqlConnection("Data Source=.;Initial Catalog=PSDB;Integrated Security=SSPI");        
    string str = "CREATE TABLE aaa ( " +
"[ID] [int] IDENTITY (1, 1) NOT NULL , " +
"[BasicID] [int] NULL ," +
"[AdoptedName] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ," +
"[AdoptedSex] [char] (2) COLLATE Chinese_PRC_CI_AS NULL ," +
"[AdoptBirthday] [smalldatetime] NULL ," +
"[AdoptedType] [varchar] (100) COLLATE Chinese_PRC_CI_AS NULL ," +
"[ApprTime] [smalldatetime] NULL ," +
"[Remark] [varchar] (500) COLLATE Chinese_PRC_CI_AS NULL " +
") ON [PRIMARY]   ";     

SqlCommand comm = new SqlCommand(str, conn);
        int i = 10;
        try
        {
            conn.Open();
            i = comm.ExecuteNonQuery();
            conn.Close();
        }
        catch (Exception ex)
        {
            Response.Write(ex.Message);
        }

        Response.Write(i.ToString());

       如果執行成功的話 返回的值為-1,如果資料表已經存在的話返回異常:資料庫中已存在名為 'aaa' 的對象。

From:MSDN

備忘

您可以使用 ExecuteNonQuery 來執行目錄操作(例如查詢資料庫的結構或建立諸如表等的資料庫物件),或通過執行 UPDATE、INSERT 或 DELETE 語句,在不使用
DataSet 的情況下更改資料庫中的資料。

雖然 ExecuteNonQuery 不返回任何行,但映射到參數的任何輸出參數或傳回值都會用資料進行填充。

對於 UPDATE、INSERT 和 DELETE 語句,傳回值為該命令所影響的行數。對於所有其他類型的語句,傳回值為 -1。如果發生復原,傳回值也為 -1。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.