關于DataRow和DataColumn的一點個人簡單理解
2024-07-21 02:23:18
供稿:網友
中國最大的web開發資源網站及技術社區,
ps:其實這個放在這里只是當作一個我對于自己不懂的地方所作的一個記錄而已。如果有什么錯誤的或者不當的地方歡迎大家指正。
關于datarow和datacolumn,其實就是datatable的行與列,作為datatable的兩個集合元素存在,用類似于坐標系里x與y的方法確定唯一的表值。
本來以為兩個都是同等性質的,不過無意中的問題說明了它們不是單純的差不多。
使用sql語句建立表,但忘記了寫進內容:create table testtable(id int primary key,description char(30));然后用datareader當然什么都不會返回。
用vs.net 2003的server explorer查看表,并沒提示錯誤。有列,但沒有行內容,也就是說這樣的“空表”是可以存在的。那試著換一下sql語句:create table testtable;或者create table testtable();都提示語法錯誤。由此可見作為表的基礎是列。
又由datareader的工作方式來看,是個以行為元素遍歷的過程,其中的數據成員是依列進行分組,輸出也就是兩個嵌套的循環:
foreach (datarow i in dt.rows)
{
foreach (datacolumn j in dt.columns)
{
console.write("/t{0}",i[j]);
}
console.writeline();
}
所有行都以列為結構,其實訪問其實是在訪問行,列只是制定其數據所在的位置名稱,可以抽象成這樣:
struct row
{
type column_1;
type column_2;
...
type column_n;
}
由此引出了一個建立在上面的問題:行與列在表里的添加。
1.datarow的添加
比較常規,就是添加元素而已,可以看作是把上面的row[]添加一個元素。
具體方法大概如下:
datarow newrow=dt.newrow(); //調用datatable dt方法newrow()聲明建立一個新行,得到一個datarow實例
...
newrow["(column name...)"]="..."; //為datarow寫入數據
...
dt.rows.add(newrow); //添加進dt
這樣就完了。
2.datacolumn的添加
似乎也簡單。事實上卻是dt里并沒有newcolumn()這個方法。
兩種思路:
a.在sql里面內建,這種思路在這里暫時不討論,有興趣的可以試一下;
b.在程序里面找到類似的add()方法調用;
這里有必要說明一下datacolumn和datacolumncollection兩個類的關系:
實際上表建立框架的是datacolumncollection,是datacolumn的一個集合,包含一組column對象,也就是說,要為表添加一列,需要在表框架的datacolumncollection上調用add()方法而不是在dt上添加作為遍歷的元素,因為列獨立出來其實也是以行->列的方式遍歷的。思路有了,于是具體實現如下:
datacolumncollection dcc=ds.tables["employees"].columns; //dataset ds,返回datacolumncollection對象集合
datacolumn newcolumn=new datacolumn(); //建立一個新列
newcolumn=dcc.add("fullname",system.type.gettype("system.string"),"firstname+' '+lastname"); //向表employees里插入列,在這里用的是datacolumncollection.add(string columnname,type columntype,string expression)方法插入列,這里的expression是指的建立的新列的值建立規則
至此,列插入結束。
作為一個小小的討論,datarow和datacolumn這樣簡單介紹一下,希望能對大家有點幫助。