1. 程式人生 > >C#之執行SQL語句:Command物件

C#之執行SQL語句:Command物件

       在使用ADO.NET中的連線資料庫:Connection物件連線上資料庫之後,我們下面所做的就是對資料庫中的資料進行操作。在ADO.NET中,是通過執行SQL語句:Command物件來對資料進行操作

       下面的所有的例子均使用下面的資料庫:

       Command物件概述

       Command物件最主要的工作是通過Connection物件對資料來源下達操作資料庫的命令。Command物件有許多屬性,但是常用的屬性為:

屬性

說明

ActiveConnection 設定要透過哪個連線物件下命令
CommandBehavior 設定Command物件的動作模式
CommandType(Text\TableDirect\StoredProcedure) 命令型別(SQL語句,完整表達句,儲存過程)
CommandText 要下達至資料來源的命令
CommandTimeout 出錯時等待時間
Parameters 引數集合
RccordsAffected 受影響的記錄數

       例一,建立一個SqlCommand物件comText,並設定出錯時等待時間為2秒。完整的程式碼為:

<span style="font-size:18px;">using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.SqlClient;//引入名稱空間

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string conStr = "server=.;user=sa;pwd=123456;database=CustomerManagement";//連線字串
            SqlConnection conText = new SqlConnection(conStr);//建立Connection物件

            try
            {
                conText.Open();//開啟資料庫
                string sql = "select * from manager";//建立統計語句
                SqlCommand comText = new SqlCommand(sql, conText);//建立Command物件
                comText.CommandTimeout = 2;//設定等待時間
                Console.WriteLine("建立Command成功");
            }
            catch (Exception ex)//建立檢查Exception物件
            {
                Console.WriteLine(ex.Message.ToString());//輸出錯誤資訊
            }
            finally
            {
                conText.Close();//關閉連線
            }
            Console.ReadLine();

        }
        
    }
}
</span>

        執行結果為:

        執行SQL語句

        定義好命令後就應當執行命令,Command物件執行命令提供了三種方法。

方法 返回值描述
ExecuteNonQuery() 不返回任何結果
ExecuteReader() 返回一個IDataReader
ExecuteScalar() 返回一個值

        1,ExecuteNonQuery方法

         這個方法沒有返回任何結果,所以一般用於updata,delete,insert語句中。

         例二,通過ExecuteNonQuery方法更改CustomerManagement資料庫中的manager資料表中id為1的使用者的密碼。完整的程式碼為:

<span style="font-size:18px;">using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.SqlClient;//引入名稱空間

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string conStr = "server=.;user=sa;pwd=123456;database=CustomerManagement";//連線字串
            SqlConnection conText = new SqlConnection(conStr);//建立Connection物件

            try
            {
                conText.Open();//開啟資料庫
                string sql = "update manager set userPwd=123456789 where id=1";//建立修改語句
                SqlCommand comText = new SqlCommand(sql, conText);//建立Command物件
                comText.ExecuteNonQuery();//執行命令
                Console.WriteLine("更改成功");
            }
            catch (Exception ex)//建立檢查Exception物件
            {
                Console.WriteLine(ex.Message.ToString());//輸出錯誤資訊
            }
            finally
            {
                conText.Close();//關閉連線
            }
            Console.ReadLine();

        }
        
    }
}
</span>

        執行時出現這樣的結果:

        編譯時並沒有出現錯誤,仔細檢查後才知道是update語句拼寫錯誤,就因為一個小小的拼寫錯誤,費了半天勁才找到,把updata改成update即可,再執行的結果為:

        在CustomerManagement資料庫中的manager資料表的內容已更改:

        2,ExecuteScalar方法

        這個方法返回一個值,一般用於只返回一個值的語句,如求資料統計的count語句,求最大數Max或最小數Min語句等。

       例三,通過Command物件的ExecuteScalar方法統計CustomerManagement資料庫中的manager資料表中的所有記錄係數。完整的程式碼為:

<span style="font-size:18px;">using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.SqlClient;//引入名稱空間

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string conStr = "server=.;user=sa;pwd=123456;database=CustomerManagement";//連線字串
            SqlConnection conText = new SqlConnection(conStr);//建立Connection物件

            try
            {
                conText.Open();//開啟資料庫
                string sql = "select count(*) from manager";//建立統計語句
                SqlCommand comText = new SqlCommand(sql, conText);//建立Command物件
                int t = 0;
                t = (int)comText.ExecuteScalar();//執行查詢並將值返回給t
                Console.WriteLine("manager資料表中的記錄係數為:"+t.ToString());
            }
            catch (Exception ex)//建立檢查Exception物件
            {
                Console.WriteLine(ex.Message.ToString());//輸出錯誤資訊
            }
            finally
            {
                conText.Close();//關閉連線
            }
            Console.ReadLine();

        }
        
    }
}</span>

        執行的結果為:

        CustomerManagement資料庫中的manager資料表中的記錄係數為:

            3,ExecuteReader方法

        ExecuteReader方法返回一個DataReader物件,可用於迭代返回記錄,有關DataReader獨享的內容將會在《C#之讀取資料:DataReader物件》詳細介紹和應用。