1. 程式人生 > >C#中操作數據庫技術之ExecuteNonQuery用法

C#中操作數據庫技術之ExecuteNonQuery用法

pen cte assign == ted for 返回 簡單的 splay

最近在補基礎知識,剛好補到C#中對數據庫操作的一些技術,今天學習了ExecuteNonQuery的東西,看自己項目維護項目的代碼和網上資料查詢,基本上搞懂了ExecuteNonQuery的用法,小小的做個總結,供以後查閱。

ExecuteNonQuery方法主要用來更新數據,當然也可以用來執行目標操作(例如查詢數據庫的結構或者創建諸如表等的數據庫對象)。通常用它來執行insert、update、delete語句,在不使用Dataset的情況下更改數據庫中的數據。select語句不適合ExecuteNonQuery()方法。

一、首先,來看看ExecuteNonQuery的返回值:

1. 對於Update、insert、Delete語句執行成功是返回值為該命令所影響的行數,如果影響的行數是0,則返回值就是0;

2. 對於所有其他類型的語句,返回值為-1;

3. 如果發生回滾,返回值也為-1;

4. 我們一般對於更新操作,通過判斷返回值是否大於0,這個是沒有問題的。但是對於其他的操作【如對數據結構的操作(建表等)】如果操作成功返回值卻是-1,但是要註意一下啊,例如給數據庫添加一個新表,創建成功返回-1,如果操作失敗就會發生異常,所有執行這種操作最好用Try,Catch語句來捕捉異常。

二、 command對象通過ExecuteNonQuery方法更新數據庫的過程非常簡單,步驟如下:

1. 創建數據庫連接;

2. 創建Command對象,並指定一個SQL Inser、Update、Delete查詢或者存儲過程;

3. 把Command對象依附到數據庫連接上;

4. 調用ExecuteNonQuery()方法;

5. 關閉連接。

三、代碼示例使用方法:

1. 首先是一個很簡單的類,裏面提供了如何用command對象通過ExecuteNonQuery方法跟新數據庫。

技術分享圖片
public class ExecuteNonQueryClas
    {
        private static string connectionString = ConfigurationManager.ConnectionStrings["connectionString"].ConnectionString;

        
//as this method provided static method, set the constructor to priviate to prevent create instance with ‘new ExecuteNonQuery()‘ private ExecuteNonQueryClas() { } public static int ExecuteNonQuery(string commandText) { return ExecuteNonQuery(commandText, (SqlParameter[])null); } public static int ExecuteNonQuery(string commandText,SqlParameter[] commandParams) { //if connectionString is null, then throw exception if(connectionString == null || connectionString.Length == 0) throw new ArgumentNullException("connectionString"); using(SqlConnection conn = new SqlConnection(connectionString)) { SqlCommand cmd = new SqlCommand(commandText,conn); if (conn.State != ConnectionState.Open) conn.Open(); //check if the commandParams is not null, then attach params to command if(commandParams !=null) AttachParameters(cmd,commandParams); int recordsAffected = cmd.ExecuteNonQuery(); return recordsAffected; } } private static void AttachParameters(SqlCommand cmd,SqlParameter[] commandParams) { if (cmd == null) throw new ArgumentException("command"); if (commandParams != null) { foreach (SqlParameter p in commandParams) { if (p != null) { //// Check for derived output value with no value assigned if ((p.Direction == ParameterDirection.InputOutput || p.Direction == ParameterDirection.Input) && (p.Value == null)) { p.Value = DBNull.Value; } cmd.Parameters.Add(p); } } } } }
View Code

2. 在主函數中的調用:

技術分享圖片
static void Main(string[] args)
        {
            string userName = Console.ReadLine();
            string loginId = "user";
            string sqlString = "update Users set UserName = @name where LoginID= @loginID";
            SqlParameter[] parms ={
                                      new SqlParameter("@name",userName),
                                      new SqlParameter("@loginID",loginId)
                                       
                                  };

            int rlt = ExecuteNonQueryClas.ExecuteNonQuery(sqlString,parms);

            Console.WriteLine(rlt);
            Console.Read();
        }
View Code

好啦, 上面就是使用ExecuteNonQuery方法最簡單的介紹和示例。之後再跟如何在ExecuteNonQuery中調用執行存儲過程,和如何將DataRow類型的參數傳遞給SqlCommand類型的參數等等。

C#中操作數據庫技術之ExecuteNonQuery用法