如何從SqlDataReader中獲取DataRow

時間 2021-10-14 20:16:29

1樓:

1、前言

使用sqldatareader較之sqldataadapter速度上快,因為讀取記錄是一行一行的來,但是往往也感覺那麼蹩腳。例如經常用到的如何從sqldatareader中獲取datarow呢?下面給出以下幾種方法。

2、dataset.load方法

首先使用dataset.load(psqldatareader, loadoption.upsert, "")將資料載入。

再使用pdataset.tables[0].rows[0]取出說要的datarow值,如下:

private datarow getdatarow(sqldatareader psqldatareader)

return pdatarow;

}該方法經常會出現數值轉換錯誤:如nvarchar 值 '123456789011' 的轉換溢位了 int 列。超出了最大整數值。需要使用者自己做排錯處理。

3、datatable.load方法

方法的原理同上,先使用pdatatable.load(psqldatareader, loadoption.upsert, null)將資料裝入datatable,然後使用pdatatable.

rows[0]獲取datarow的值。**如下:

private datarow getdatarow(sqldatareader psqldatareader)

return pdatarow;

}同樣如果資料不符合則出現上面的錯誤。

4、sqldatareader.getvalue和datatable.loaddatarow方法

首先使用psqldatareader.getvalues(values)將資料輸出到陣列values中,然後通過pdatatable.loaddatarow(values, false)將資料裝入datatable,最後使用pdatarow = pdatatable.

rows[0]取出需要的值。**如下:

private datarow getdatarow(sqldatareader psqldatareader)

return pdatarow;

}5、sqldatareader.getvalues和datarow.itemarray = values方法

該方法使用上面的原理,首先使用psqldatareader.getvalues(values)將資料輸出到陣列values中,然後定義一個datarow,使用datarow.itemarray = values方法對datarow進行賦值,**如下:

private datarow getdatarow1(sqldatareader psqldatareader)

注意由於新定義的datarow沒有欄位資訊,需要對datarow的列欄位進行定義,定義一個空的符合資料要求的datarow,使用datatable.newrow();,然後就可以使用該方法pdatarow.itemarray = values進行賦值。

該方法效率高。

6、總結

本文建議使用最後一種方法,效率高且轉換安全。

2樓:古老的情歌

為什麼不用sqlgetdata呢?

用datareader如何獲取資料的總行數

3樓:郭偉新

當你在用read()屬性讀取時。

在上面加一個變數 int count=0;

whiel(datareader.read())while迴圈結束時,你的count就代表了while迴圈了多少次,當然,你也知道讀出幾行資料啦。最後的count的值就是總共數

4樓:匿名使用者

1 ,這裡我就不談sqldatareader和dateset的區別了,主要說下我們怎麼能夠構造一個能夠高效率的datatable,當然也是可以構造一個arraylist來新增實體類。sqldatareader中我們能夠獲取執行sql後的欄位名稱(getname方法)和獲取欄位型別(getfieldtype方法),這樣我們就能夠構造一個datatable.

for (int i = 0; i < intcollength; i++)

sqldatareader是一個單向的遊標,不能夠從某個起點往下讀資料,這點我覺得微軟是做的有點不夠,這樣如果查詢結果多,而要獲取的是資料集的最後的資料要消耗掉一點資源。

2,如何讓sqldatareader再提高點,那你就只能指定是從那一行縱向讀資料了,也就是在你頁面中需要顯示的資料才讀取,其他資料單向下移動讀取遊標就可以,下面就是一個這樣的例項**

#region "私有變數"

////// 表示一個到資料庫的開啟的連線

///private system.data.sqlclient.sqlconnection con = new sqlconnection();

////// 表示執行物件是sql還是儲存過程

///private system.data.sqlclient.sqlcommand cmd = new sqlcommand();

////// 表示用於填充 system.data.dataset 和更新資料庫的一組資料命令和到資料庫的連線

///private system.data.sqlclient.sqldataadapter dtapt = new sqldataadapter();

////// 表示要在資料庫中生成的事務

///private system.data.sqlclient.sqltransaction sqltran;

////// 提供從資料來源讀取資料行的只進流的方法

///private sqldatareader dtrvalue = null;

#endregion

#region"資料庫連線處理"

////// 獲得webconfig中的 預設 sql連線字串

///public void begintransaction()

cmd.transaction = sqltran;}}

////// 提交事務

///public void committransection()

////// 回滾事務

///public void rollbacktransection()

#endregion

#region"返回分頁表資料datatable [read] 方式獲取資料,資料量建議在查詢結果在10000條記錄內"

////// 用於分頁控制元件,返回需要顯示頁的資料和記錄條數

////// sql語句

/// sql引數和其對應值

/// 開始記錄

/// 每頁顯示記錄條數

/// 返回記錄條數

/// 查詢資料集

protected datatable executereadtable(string p_strsql, sqlparameter p_cmdparms, int p_intstart, int p_intpagesize, ref int out_intcount)

////// 1. 根據儲存過程和引數值得到datatable 值

/// 2. 根據sql的得到datatable 值

////// 是儲存過程還是sql

/// 開始記錄

/// 每頁顯示條數

/// 可是是sql 也可以是儲存過程

/// sqlparameter引數列表

/// 返回總記錄數

/// 返回datatable

/// 命令型別 1commandtype.text sql語句 2commandtype.storedprocedure儲存過程

/// 命令型別 1 sql語句 2儲存過程名稱

/// sqlparameter

/// sqldatareader

private sqldatareader executereader(commandtype p_objcmdtype, string p_strsql, sqlparameter p_cmdparms)

}dtrret = cmd.executereader();

cmd.parameters.clear();

return dtrret;

}catch (exception e)

}if (con.state != connectionstate.closed && sqltran == null)

// 寫錯誤日誌

sehr.bll.function.

addmsglog.adderror("sqlbase", e.message + ""n"r sql :

" + p_strsql + ""n"r 引數 : " + strerr, e.stacktrace);

return null;

}finally}}

#endregion

c#中,如何將datarow[]轉換datatable? 30

5樓:等不到的落幕

用自帶的函式吧,就一句話: datatable dt = drarr.copytodatatable();

6樓:

public static datatable todatatable(this datarow datarow)

7樓:輕舞霓裳

用dt去新增沒個datarow。

8樓:匿名使用者

public datatable todatatable(datarow rows)

9樓:匿名使用者

就把datarow一個一個新增到datatabledatatable dt = new datatable();

datarow dr = 。。。;

dt.rows.add(dr);

如果這樣不行就迴圈datarow ,一個一個的新增dt.rows.add(dr[0]);............

如何從自卑變成自信,如何從自卑變成自信????

我們要學會用正面的 積極的語言影響我們的思維習慣。比如,當你遇到一個困難或挑戰的時候,如果內心有一個聲音對你說 我不行,我應該放棄 請馬上站出來告訴自己 我應該試一試。即使我失敗了,也不是因為我不行,而是因為我暫時還沒有找到成功的方法。也就是換了種思維 我做不了這些。我現在可能做不好,但沒關係,慢慢...

從財務角度如何控制公司的成本,如何從財務角度控制生產成本,提高生產效益

財務人員不能控制企業成本的,財務會計知識對已經發生的經濟活動進行核算而已,你想這些事後處理的工作怎麼能控制成本呀, vinny陸 財務的角度有什麼辦法?費用報銷稽核嚴格,不能報的費用一定不給報 成本一般來講採購降低進貨 是最為主要,採購為公司節省1元相當於銷售賣出11元的貨 再一要素就是生產工藝流程...

失戀以後如何從自卑的情緒中走出,如何從後悔的情緒中走出來?

巧尅力星星 完全沒有必要的 其實像你這樣條件的女生多的是 又不是全世界就你條件最差嘍 我想戀愛的失敗可能讓你更加的自卑 其實你現在要的是讓自己充實起來 更多的和朋友相處 每天都充實而忙碌 不要去多想 一切順其自然 漸漸的你會好起來的 慢慢的會有別的男生走近你的身邊 試著開啟心胸去接受他們 只要享受愛...