• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • ADO.NET讀書筆記系列之------SqlCommander和SqlDataReader對象

    發表于:2007-07-02來源:作者:點擊數: 標簽:
    一、特點介紹 ⒈SqlCommand:表示要對SQL Server 數據庫 執行的一個Transact-SQL語句或存儲過程。 ⒉SqlDataReader:提供一種從數據庫讀取只進的行流的一種方式。若要創建SqlDataReader,必須調用SqlCommand對象的ExecuteReader方法,而不直接使用構造函數。應

    一、特點介紹

    ⒈SqlCommand:表示要對SQL Server數據庫執行的一個Transact-SQL語句或存儲過程。

    ⒉SqlDataReader:提供一種從數據庫讀取只進的行流的一種方式。若要創建SqlDataReader,必須調用SqlCommand對象的ExecuteReader方法,而不直接使用構造函數。應該盡可能迅速的關閉SqlDataReader對象。

    ⒊SqlParameter:表示SqlCommand的參數,也可以是它到DataSet列的映射。

     

    二、使用介紹

    ⒈創建SqlCommand對象:

        string strConn,strSQL;

        strConn=”…………”;

        strSQL=”Select CustomerID,CompanyName from Customers”;

        SqlConnection cn = new SqlConnection(strConn);

        cn.Open();

        SqlCommand cmd;

       

        cmd=new SqlCommand();

        cmd.CommandText=strSQL;

        cmd.Connection=cn;

     

        cmd=new SqlCommand(strSQL,cn); 

    ⒉執行無返回行的查詢:

        string strConn,strSQL;

        strConn=”……”;

    strSQL=”Update Customers SET CompanyNme=’NewName’where CustomersID=’ALFKI’”;

        SqlConnection cn=new SqlConnection(strConn);

        cn.Open();

        SqlCommand cmd=new SqlCommand(strSQL,cn);

        int RecordsAffercted=cmd.ExecuteNonQuery();

        if(RecordsAffercted ==1)

           ……

        else

          …………

    ⒊用SqlDataReader對象檢查查詢結果:

    ①    獲取結果

    string strConn,strSQL;

      strConn=”……”;

        SqlConnection cn=new SqlConnection(strConn);

      cn.Open();

      strSQL=”Select CustomerID,CompanyName from Customers”;

        SqlCommand cmd=new SqlCommand(strSQL,cn);

    SqlDataReader rdr=cmd.ExecuteReader();

         While(rdr.Read())

          Console.Writeline(rdr[“CustomerID”]+rdr[“CompanyName”]);

      Rdr.Close(); 

    ②    更快獲取

    Ⅰ使用基于序號的查找

        ……

        SqlDataReader rdr=cmd.ExecuteReader();

        int CustomerIDOrdinal = rdr.GetOrdinal(“CustomerID”);

        int CompanyNameOrdinal = rdr.GetOrdinal(“CompanyName”);

        while(rdr.Read())

            Console.WriteLine(rdr[CustomerIDOrdinal]+rdr[CompanyNameOrdinal]);

        rdr.Close();

    Ⅱ使用適當的類型指定Get方法

        ……

        SqlDataReader rdr=cmd.ExecuteReader();

        int CustomerIDOrdinal = rdr.GetOrdinal(“CustomerID”);

       int CompanyNameOrdinal = rdr.GetOrdinal(“CompanyNameOrdinal”);

        while(rdr.Read())

            Console.WriteLine(rdr.GetString(CustomerIDOrdinal)+rdr.GetString(CompanyNameOrdinal));

        rdr.Close(); 

    ③獲取多個結果

        …

        cn.Open();

        string strSQL =”select CustomerID,CompanyName from Customers;”+“select OrderID,CustomerID from Orders;”;

        SqlCommand cmd=new SqlCommand(strSQL,cn);

        SqlDataReader rdr=cmd.ExecuteReader();

        do

        {

            while(rdr.Read())

               Console.WriteLine(rdr[0]+rdr[1]);

            Console.WriteLine();

        }while(rdr.NextResult()); 

    ⒋執行返回單值的查詢:

        …

        cn.Open();

        SqlCommand cmd=new SqlCommand(“select count(*) from customers",cn);

        int Customres = Convert.ToInt32(cmd.ExecuteScalar());   

    ⒌執行參數化查詢和調用存儲過程:

        SqlCommand cmd = new SqlCommand("DelQXRY", cn);

        cmd.CommandType = CommandType.StoredProcedure;

        SqlParameter parameterRoleID = new SqlParameter("@ID", SqlDbType.Int, 4);

        parameterRoleID.Value = 444;

        cmd.Parameters.Add(parameterRoleID);  

        cn.Open();

        cmd.ExecuteNonQuery(); 

    ⒍ 從 輸出參數中獲取數據:

        Create Procedure GetCustomer(@CompanyName nvarchar(30) output,@CustomerID nchar(5)) AS SELECT @CompanyName=CompanyName from Customers where CustomerID=@CustomerID

        …

    cmd.Parameters[“@CompanyName”].Direction =ParameterDirection.Output; 

     

    ⒎在Transaction中執行查詢:

        …

        cn.Open();

        SqlTransaction txn=cn.BeginTransaction();

        String strSQL=”Insert into Customers(…)values(…)”;

        SqlCommand cmd=new SqlCommand(strSQL,cn,txn);

        int RecordAffected = cmd.ExecuteNonQuery();

        if(RecordAffected ==1)

        {

            txn.Commit();

        }

        else

        {

            txn.RollBack();

        }

     

    三、屬性方法事件介紹

    ⒈SqlCommand

    Ⅰ屬性

        ①CommandText: 要執行的 Transact-SQL 語句或存儲過程。默認為空字符串。

        ②CommandTimeOut: 等待命令執行的時間(以秒為單位)。默認為 30 秒。

        ③CommandType: CommandType 值之一。默認值為 Text。



        ④Connection: 與數據源的連接。默認值為空引用

        ⑤Parameters: Transact-SQL 語句或存儲過程的參數。默認為空集合。

        ⑥Transaction:指定用于查詢的事務處理

        ⑦UpdateRowSource:如果通過調用DataAdapter對象的Update方法來使用Command,那么該屬性就用于控制影響當前DataRow的查詢結果(默認值為Both)

     

    Ⅱ方法

    ①Cancel: 試圖取消SqlCommand的執行。如果沒有要取消的內容,則什么都不會發生。但如果有命令正在執行,而取消嘗試失敗,則不會生成異常。Cancel方法還會導致Command對象刪除DataReader對象上所有未讀的行。

    ②CreateParameter:為查詢創建一個新參數。

    ③ExecuteNonQuery:對連接執行Transact-SQL語句并返回受影響的行數。對于 UPDATE、INSERT 和 DELETE 語句,返回值為該命令所影響的行數。對于所有其他類型的語句,返回值為 -1。如果發生回滾,返回值也為 -1。

    ④ExecuteReader:將CommandText發送到Connection并生成一個SqlDataReader。

      public SqlDataReader ExecuteReader(CommandBehavior);



    ⑤ExecuteScalar:執行查詢,并返回查詢所返回的結果集中第一行的第一列。忽略額外的列或行。

    ⑥ExecuteXmlReader:將CommandText發送到Connection并生成一個XmlReader。

    ⑦PrePare:在 SQL Server 的實例上創建命令的一個準備版本。在調用 Prepare 之前,應指定要準備的語句中的每個參數的數據類型。

    ⑧ResetCommandTimeOut:將CommandTimeout屬性設置為默認值30秒。

     

    Ⅲ事件

    ⒉SqlDataReader

    Ⅰ屬性

    ①Depth:獲取一個值,該值指示當前行的嵌套深度。最外層表的深度為零。SQL Server .NET Framework 數據提供程序不支持嵌套并總是返回零值。

    ②FieldCount:獲取當前行中的列數。如果未放在有效的記錄集中,則為 0;否則為當前行中的列數。默認值為 -1。執行不返回行的查詢后,FieldCount 返回 0。

    ③HasRows:如果SqlDataReader包含一行或多行,則為true;否則為false。

    ④IsClosed:如果SqlDataReader已關閉,則為true;否則為false。

    ⑤Item:獲取以本機格式表示的列的值。

    ⑥RecordsAffected:已更改、插入或刪除的行數;如果沒有任何行受到影響或語句失敗,則為 0;-1 表示 SELECT 語句。

    Ⅱ方法

    ①Close:關閉SqlDataReader對象。如果返回值和查詢影響的記錄的數量不重要,則可以在調用Close方法前調用關聯的SqlCommand對象的Cancel方法,從而減少關閉SqlDataReader所需要的時間。

    ②GetName:獲取指定列的名稱。

    ③GetOrdinal:在給定列名稱的情況下獲取列序號。

    ④GetValue:獲取以本機格式表示的指定列的值。

    ⑤GetValues:獲取當前行的集合中的所有屬性列。

    ⑥IsDBNull:獲取一個值,該值指示列中是否包含不存在的或缺少的值。如果指定的列值與DBNull等效,則為true;否則為false。

    ⑦NextResult:當讀取批處理 Transact-SQL 語句的結果時,使數據讀取器前進到下一個結果。如果存在多個結果集,則為 true;否則為 false。

    ⑧Read:使SqlDataReader前進到下一條記錄,如果存在多個行,則為true;否則為false。必須調用Read來開始訪問任何數據。在某一時間,每個關聯的SqlConnection只能打開一個SqlDataReader,在上一個關閉之前,打開另一個的任何嘗試都將失敗。

    Ⅲ事件

    ⒊SqlParameter

    Ⅰ屬性

    ①DbType:獲取或設置參數的DbType。默認值為String。

    ②Direction:獲取或設置一個值,該值指示參數是只可輸入、只可輸出、雙向還是存儲過程返回值參數。默認值為 Input。



    ③IsNullable:獲取或設置一個值,該值指示參數是否接受空值。如果接受空值,則為 true;否則為 false。默認為 false。

    ④ParameterName:獲取或設置 SqlParameter 的名稱。

    ⑤Size:獲取或設置列中數據的最大大?。ㄒ宰止潪閱挝唬?。默認值是從參數值推導出的。

    ⑥SqlDbType:獲取或設置參數的SqlDbType。默認為NVarChar。SqlDBType和DbType是相互連接的。設置DBtype會將SqlDbType更改為支持的SqlDbType。

    ⑦Value:獲取或設置該參數的值。默認為空。

    Ⅱ方法

    Ⅲ事件

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>