国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

ADO.NET讀書筆記系列之------SqlCommander和SqlDataReader對象

2024-07-21 02:06:30
字體:
來源:轉載
供稿:網友

一、特點介紹

⒈sqlcommand:表示要對sql server數據庫執(zhí)行的一個transact-sql語句或存儲過程。

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

⒊sqlparameter:表示sqlcommand的參數,也可以是它到dataset列的映射。

 

二、使用介紹

⒈創(chuàng)建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); 

⒉執(zhí)行無返回行的查詢:

    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()); 

⒋執(zhí)行返回單值的查詢:

    …

    cn.open();

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

    int customres = convert.toint32(cmd.executescalar());   

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

    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 [email protected]

    …

cmd.parameters[“@companyname”].direction =parameterdirection.output; 

 

⒎在transaction中執(zhí)行查詢:

    …

    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: 要執(zhí)行的 transact-sql 語句或存儲過程。默認為空字符串。

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

    ③commandtype: commandtype 值之一。默認值為 text。



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

    ⑤parameters: transact-sql 語句或存儲過程的參數。默認為空集合。

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

    ⑦updaterowsource:如果通過調用dataadapter對象的update方法來使用command,那么該屬性就用于控制影響當前datarow的查詢結果(默認值為both)

 

ⅱ方法

①cancel: 試圖取消sqlcommand的執(zhí)行。如果沒有要取消的內容,則什么都不會發(fā)生。但如果有命令正在執(zhí)行,而取消嘗試失敗,則不會生成異常。cancel方法還會導致command對象刪除datareader對象上所有未讀的行。

②createparameter:為查詢創(chuàng)建一個新參數。

③executenonquery:對連接執(zhí)行transact-sql語句并返回受影響的行數。對于 update、insert 和 delete 語句,返回值為該命令所影響的行數。對于所有其他類型的語句,返回值為 -1。如果發(fā)生回滾,返回值也為 -1。

④executereader:將commandtext發(fā)送到connection并生成一個sqldatareader。

  public sqldatareader executereader(commandbehavior);



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

⑥executexmlreader:將commandtext發(fā)送到connection并生成一個xmlreader。

⑦prepare:在 sql server 的實例上創(chuàng)建命令的一個準備版本。在調用 prepare 之前,應指定要準備的語句中的每個參數的數據類型。

⑧resetcommandtimeout:將commandtimeout屬性設置為默認值30秒。

 

ⅲ事件

⒉sqldatareader

ⅰ屬性

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

②fieldcount:獲取當前行中的列數。如果未放在有效的記錄集中,則為 0;否則為當前行中的列數。默認值為 -1。執(zhí)行不返回行的查詢后,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:獲取或設置列中數據的最大大小(以字節(jié)為單位)。默認值是從參數值推導出的。

⑥sqldbtype:獲取或設置參數的sqldbtype。默認為nvarchar。sqldbtype和dbtype是相互連接的。設置dbtype會將sqldbtype更改為支持的sqldbtype。

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

ⅱ方法

ⅲ事件
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 柘城县| 汨罗市| 兴山县| 高陵县| 毕节市| 芜湖市| 固始县| 包头市| 盐源县| 饶河县| 深水埗区| 曲麻莱县| 阳曲县| 从化市| 宁蒗| 新河县| 昭平县| 宁国市| 湖北省| 鄂伦春自治旗| 泰州市| 海城市| 义乌市| 宽城| 绥德县| 宜春市| 富源县| 韶山市| 大化| 福海县| 乐亭县| 拜泉县| 郯城县| 从江县| 光山县| 大丰市| 新田县| 精河县| 双峰县| 岑溪市| 德钦县|