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元的貨 再一要素就是生產工藝流程...
失戀以後如何從自卑的情緒中走出,如何從後悔的情緒中走出來?
巧尅力星星 完全沒有必要的 其實像你這樣條件的女生多的是 又不是全世界就你條件最差嘍 我想戀愛的失敗可能讓你更加的自卑 其實你現在要的是讓自己充實起來 更多的和朋友相處 每天都充實而忙碌 不要去多想 一切順其自然 漸漸的你會好起來的 慢慢的會有別的男生走近你的身邊 試著開啟心胸去接受他們 只要享受愛...