标签: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;
//如果未找到行,返回null8 用搜索条件选择行及排序
//匹配字条串时区分大小写 //someTable.CaseSensitive=True;//默认不区分大小写 DataRow[] matchRows = someTable.Select(filterCriteria,sortRules); //filterCriteria 过滤表达式参考 DataColumn.Expression 很强大 //sortRules OrderDate DESC,CustomerName ASC,ASC是默认排序,可省略.
本文出自 “智垒天下” 博客,请务必保留此出处http://chenwan.blog.51cto.com/2754591/1567286
标签:ado.net
原文地址:http://chenwan.blog.51cto.com/2754591/1567286