ADO.NET知識點筆記

1 DataColumn 的DataType可以是任一數(shù)據(jù)類型,包括自義定類和結(jié)構(gòu).

創(chuàng)新互聯(lián)公司服務(wù)項目包括孝感網(wǎng)站建設(shè)、孝感網(wǎng)站制作、孝感網(wǎng)頁制作以及孝感網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,孝感網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到孝感省份的部分城市,未來相信會繼續(xù)擴大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!

DataTable dt = new DataTable("Product");
            dt.Columns.Add("ProductId",typeof(int));
            dt.Columns.Add("ProductProperty", typeof(ProductProperty));

            DataRow r1 = dt.NewRow();
            r1["ProductId"] = 1;
            r1["ProductProperty"] = new ProductProperty() { ProductionDate = DateTime.Now, Desc = "牛奶糖" };

            dt.Rows.Add(r1);

            foreach(DataRow dr in dt.Rows)
            {
                Console.WriteLine("productId {0};ProductionDate:{1};Desc:{2};",
                    dr["ProductId"].ToString(),
                    (dr["ProductProperty"] as ProductProperty).ProductionDate.ToString(),
                    (dr["ProductProperty"] as ProductProperty).Desc);
            }

2 Unique屬性標記為True 的DataColumn 不請允許有NULL值.

3 判斷DataRow中某個列是否已經(jīng)修改

//oneRow.DataRowState=DataRowState.Changed,否則可能沒有Original版本
if(oneRow.HasVersion(DataRowVersion.Proposed))
{
    if(oneRow["Salary",DataRowVersion.Original]!=oneRow["Salary",DataRowVersion.Proposed])
    {
        //salary field has changed
    }
}

4 使用DataRow.BeginEdit() DataRow.EndEdit() 延遲數(shù)據(jù)驗證,同時減少RowChanged事件觸發(fā)次數(shù)

oneRow.BeginEdit();
oneRow["ProductName"]="ColaVeryGood";//ProductName MaxLength 為10
oneRow["UnitPrice"]=12.4;//UnitPrice 最大值為 10.0
oneRow.EndEdit();//直到此時才發(fā)生數(shù)據(jù)驗證異常,如果沒有異常,則發(fā)生RowChanged事件,而不會觸發(fā)兩次事件.

5 基于驗證的錯誤

利用DataColumnChanging,DataRowChanging,可以修改的數(shù)據(jù)進行驗證,防止不符合驗證程序的數(shù)據(jù)輸入到列字段或提示出數(shù)據(jù)不合法.

private void app_ColumnChanging(object sender,DataColumnChangeEventArgs e)
{
    if(e.Column.ColumnName=="Age")
    {
        if((int)e.ProposedValue>120)
            e.Row.SetColumnError(e.Column,"Human can't live that long");
    }   
}

6 列級別的錯誤

public void ShowFirstRowError(DataRow row)
{
    string errorText = "No error!";
    DataColumn[] errorColumns = row.GetColumnsInError();
    if(errorColumns.Count>0)
    {
        errorText= row.GetColumnError(errorColumns[0]);
    } 
    else if(row.RowError.Length>0)
    {
        errorText = row.RowError;        
    }
    // show errorText
}

7 按主鍵搜索行

DataRow matchRow = someTable.Rows.Find(searchValue);//single-part key
DataRow matchRow = someTable.Rows.Find(new object[]{value1,value2})//multi-Part key;
//如果未找到行,返回null

8 用搜索條件選擇行及排序

//匹配字條串時區(qū)分大小寫
//someTable.CaseSensitive=True;//默認不區(qū)分大小寫
DataRow[] matchRows = someTable.Select(filterCriteria,sortRules);
//filterCriteria 過濾表達式參考 DataColumn.Expression 很強大
//sortRules OrderDate DESC,CustomerName ASC,ASC是默認排序,可省略.

9 產(chǎn)生單一聚合

產(chǎn)生單一聚合是指使用聚合方法計算某個表的字段,但不作為一個表的計算列,例如:

decimal averageSalary = (decimal)employeeTable.Compute("Avg(Salary)",filterExpression);
//其他"Avg(Salary)"是計算表達式,如計算列的計算表達式一樣
//filterExpression 是過濾表達式,和DataTable.Selete()方法的過濾表達式一樣.

10 DataView

DataView是DataTable的視圖,是對表的列的一個索引,并不直接包含具體的列.被包含的列仍然屬于原來的DataTable.

DataView 有三個重要的屬性.

RowFilter:列過濾表達式,與DataTable的表達式一樣

Sort:排序表達式

RowStateFilter:根據(jù)DataRow的 RowState屬性過濾列,并且可以指定要顯示的數(shù)據(jù)的版本.比如DataRowViewState.ModifiedOriginal 顯示RowState為Changed的列的原始版本的數(shù)據(jù).

每次設(shè)置三個屬性之一都會重建其對底層DataTable的索引,為減少重建次數(shù),應(yīng)該盡量在 DataView()構(gòu)造方法中設(shè)置好這三個屬性.

當(dāng)前題目:ADO.NET知識點筆記
URL分享:http://bm7419.com/article2/psspoc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站設(shè)計、手機網(wǎng)站建設(shè)網(wǎng)站營銷、App設(shè)計、軟件開發(fā)微信小程序

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站托管運營