ADO.NET知识点笔记

1 DataColumn 的DataType可以是任一数据类型,包括自义定类和结构.

创新互联公司服务项目包括孝感网站建设、孝感网站制作、孝感网页制作以及孝感网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,孝感网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到孝感省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!

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中某个列是否已经修改

//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() 延迟数据验证,同时减少RowChanged事件触发次数

oneRow.BeginEdit();
oneRow["ProductName"]="ColaVeryGood";//ProductName MaxLength 为10
oneRow["UnitPrice"]=12.4;//UnitPrice 最大值为 10.0
oneRow.EndEdit();//直到此时才发生数据验证异常,如果没有异常,则发生RowChanged事件,而不会触发两次事件.

5 基于验证的错误

利用DataColumnChanging,DataRowChanging,可以修改的数据进行验证,防止不符合验证程序的数据输入到列字段或提示出数据不合法.

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 用搜索条件选择行及排序

//匹配字条串时区分大小写
//someTable.CaseSensitive=True;//默认不区分大小写
DataRow[] matchRows = someTable.Select(filterCriteria,sortRules);
//filterCriteria 过滤表达式参考 DataColumn.Expression 很强大
//sortRules OrderDate DESC,CustomerName ASC,ASC是默认排序,可省略.

9 产生单一聚合

产生单一聚合是指使用聚合方法计算某个表的字段,但不作为一个表的计算列,例如:

decimal averageSalary = (decimal)employeeTable.Compute("Avg(Salary)",filterExpression);
//其他"Avg(Salary)"是计算表达式,如计算列的计算表达式一样
//filterExpression 是过滤表达式,和DataTable.Selete()方法的过滤表达式一样.

10 DataView

DataView是DataTable的视图,是对表的列的一个索引,并不直接包含具体的列.被包含的列仍然属于原来的DataTable.

DataView 有三个重要的属性.

RowFilter:列过滤表达式,与DataTable的表达式一样

Sort:排序表达式

RowStateFilter:根据DataRow的 RowState属性过滤列,并且可以指定要显示的数据的版本.比如DataRowViewState.ModifiedOriginal 显示RowState为Changed的列的原始版本的数据.

每次设置三个属性之一都会重建其对底层DataTable的索引,为减少重建次数,应该尽量在 DataView()构造方法中设置好这三个属性.


分享文章:ADO.NET知识点笔记
网站网址:http://hbruida.cn/article/psspoc.html