dr[“Orderid”]aspnet是什么意思思 asp.net 急求 谢谢

6475人阅读
ASP.NET(14)
这篇文章本来应该很早就写出来的,但是一直苦于自己的精神能力有限,而且已经到了我们学校的考试周,所以时间上还是有点紧迫。关键的一点就是,找不到合理的思路来写,思路没有的话,就算是再好的素材,也写不来大家喜欢的文章。
之前已经写过关于.NET三层架的两篇文章了,一篇是和。如果大家有兴趣的话,可以去读一读。当然了,这两篇文章的内容,大部分都不是自己的,自己也是看了别人的博文,然后自己总结一下,拿过来自己用罢了。这次的文章主要是自己亲自使用这些知识做了一个项目(我们学校资环学院的院网站),然后拿出来跟大家分享一下。也不要期望博主能够写出多么有水平的文章,我还是学生(大三),我也是在学习的过程中,写博客之不过是想记录自己学习过程中的点滴和记录自己的进步,如果能够顺便的帮助别人学习就更好了。同时也希望大家能够多给我提意见。
非常感谢博客园的博友 @&&,@,@&等博友给我提出的宝贵的修改意见。也希望大家在阅读本博文的时候,如果有什么问题,或者疑问及时的给我留言沟通,大家一起探讨。
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
对于三层架构来说,主要是使用设计模式的思想,对于项目的各个模块实现&高内聚,低耦合&的思想。这里就不做详细的介绍了,如果大家有兴趣,可以阅读软件工程和设计模式相关文章。
对于三层架构来说,就是使用类,把我们在做项目的过程中,可能需要反复操作数据库,反复的使用某个方法等等,可能就是操作的参数不同。如果我们如果在每次使用的时候,都去编写相应的代码,无疑会增加程序员的负担。所以,为了增加方法的重用,就把这些能够重用的方法抽象成类,以供程序员在其它地方可以调用。
当然了,这也是面向对象的一部分。其中的三层所指的就是:①视图层(UI)②数据库访问层(DAL)③业务逻辑层(BLL)。当然了,还有所谓的第四层-实体层(model),这一层主要是在这三个层之间进行流动传递。但是为什么不叫四层架构。。。原因我也不知道,可能是因为实体层是外在的可以根据需要会随时变化的(如:项目后续模块的添加等)。而其它三个层,如果搭建完后,可以作为框架来使用的。。。
1)首先还是先来介绍一下实体层吧,就是我们通常所说的model
实体就是我们在开发项目过程中所要涉及的一些对象。把这些所要涉及的对象(如:新闻名称,新闻上传时间,供稿人,上传文件的名称等),都抽象成一个类。使用封装字段方法,我们可以在视图层通(主要是视图层)过实例化对象的方法,来给我们的对象的属性赋值。
简单的看一段代码吧,可能会能够更加的清楚,明白
public class NewsModel
//新闻编号
private int nNewsId;
public int NNewsId
get { return nNewsId; }
set { nNewsId = }
//新闻名称
private string strNewsN
public string StrNewsName
get { return strNewsN }
set { strNewsName = }
}这里的NewsModel就是一个关于新闻的实体类,其中声明了两个private的属性字段(一定要是private,防止非法赋值),使用public的构造函数,可以在外部给字段赋值。
下面的就是在视图层来实例化对象,根据需要来给字段赋值,看下面的一段代码:
NewsModel newModel = new NewsModel();
newModel.StrNewsName = this.TextBox1.T
当然了,这仅仅是一段代码,其中并没有给字段nNewsId赋值,因为我把它作为数据库的id地段,已经设置成自动增长。这样,就完成了视图层对实体层的调用。
2)数据库访问层
数据库库访问层,顾名思义,就是主要来完成对数据库的访问,等一系类的对数据库操作的类。为什么要单独的把对数据库的操作抽象成一个单独的类,我个人理解是因为在整个项目的开发过程中,不仅仅需要一次访问数据库,而是需要多次,如果每次都编写数据库访问代码的话,会增加程序员的个人工作量,而且对于代码的易用性和简洁性来说肯定是非常糟糕的。当然来可能还有其它的一些优点,我暂时还没有发现。
既然是对数据库的操作类,而且对数据库的操作,无非就是四种:增删改查。所以一个能提供增删改查的通用类是必不可少的。这就是我们经常所说的,通用数据库访问类(很多的程序员都喜欢把这个类命名为SqlHelper,既然是名字,都是可以随意起的,只要不违反C#语法命名规范,当然这样命名也是有好处,就是可以使其他程序员根据类的名称,大概判断出这个类是要干什么的)。
当然了,我这次做自己项目的时候,所写的数据库访问类就没有我上次看周金桥老师的书,然后模仿写的数据库访问类那么的复杂了()。当然了,我这里的数据库访问类,主要还是为了简介,和易用,只要满足我自己当前项目的需要就可以了,不是每做一个项目,都要写一个功能全面的数据库访问类。
代码如下,请大家参考,更喜欢哪个访问类,自己可以根据自己口味,或者需要,直接用也可以:
/// &summary&
///创建一个SqlHelper的数据库访问通用类,完成对数据库的所有操作
/// &/summary&
public class SqlHelper
//定义数据库的连接字符串
private static readonly string connectionString = ConfigurationManager.ConnectionStrings[&strConnectionString&].ConnectionS
/// &summary&
/// 创建方法,完成对数据库的非查询的操作
/// &/summary&
/// &param name=&sql&&sql语句&/param&
/// &param name=&parameters&&传入的参数&/param&
/// &returns&&/returns&
public static int ExecuteNonQuery(string sql, params SqlParameter[] parameters)
using (SqlConnection con = new SqlConnection(connectionString))
con.Open();
using (SqlCommand cmd = con.CreateCommand())
mandText =
cmd.Parameters.AddRange(parameters);
string str =
return cmd.ExecuteNonQuery();
/// &summary&
/// 完成查询的结果值
/// &/summary&
/// &param name=&sql&&sql语句&/param&
/// &param name=&parameters&&传入的参数数组&/param&
/// &returns&&/returns&
public static int ExecuteScalar(string sql, params SqlParameter[] parameters)
using (SqlConnection con = new SqlConnection(connectionString))
con.Open();
using (SqlCommand cmd = con.CreateCommand())
mandText =
cmd.Parameters.AddRange(parameters);
return Convert.ToInt32( cmd.ExecuteScalar());
/// &summary&
/// 主要执行查询操作
/// &/summary&
/// &param name=&sql&&执行的sql语句&/param&
/// &param name=&parameters&&参数数组&/param&
/// &returns&&/returns&
public static DataTable ExecuteDataTable(string sql, params SqlParameter[] parameters)
using (SqlConnection con = new SqlConnection(connectionString))
con.Open();
using (SqlCommand cmd = con.CreateCommand())
mandText =
cmd.Parameters.AddRange(parameters);
SqlDataAdapter adapter = new SqlDataAdapter(cmd);
DataTable dt = new DataTable();
adapter.Fill(dt);
}这样的类创建好以后,其他的需要访问数据库的类,就可以根据自己的需要,完成相应的增删改查的操作了。还是用一段代码来演示吧:
/// &summary&
///NewsDALL 的摘要说明
/// &/summary&
public class NewsDALL
//向数据库中插入新闻
public int AddNews(NewsModel model)
string sql = &insert into News (name,author,time,content,sort,isdelete) values(@name,@author,@time,@content,@sort,@isdelete)&;
int nResult = SqlHelper.ExecuteNonQuery(sql, new SqlParameter(&@name&, model.StrNewsName), new SqlParameter(&@author&,model.StrNewsAuthor),new SqlParameter(&@time&, model.StrAddTime), new SqlParameter(&@content&, model.StrNewsContent), new SqlParameter(&@sort&, model.Sort), new SqlParameter(&@isdelete&, model.IsDelete1));
//执行数据库的删除操作
public int DeleteNew(int id)
string sql = &delete from News where id=@id&;
int nResult = SqlHelper.ExecuteNonQuery(sql, new SqlParameter(&@id&, id));
//执行数据库的更新操作
public int UpdateNew(NewsModel model, int nID)
string sql = &update News set name=@name,time=@time,content=@content where id=& + nID;
int nResult = SqlHelper.ExecuteNonQuery(sql, new SqlParameter(&@name&, model.StrNewsName), new SqlParameter(&@time&, model.StrAddTime), new SqlParameter(&@content&, model.StrNewsContent));
//执行数据库的查询操作
public NewsModel GetNewsModel(int id)//声明一次从数据库中读取新闻的条数
string sql = &select * from News where id=@id&;
DataTable dt = SqlHelper.ExecuteDataTable(sql, new SqlParameter(&@id&, id));
if (dt.Rows.Count &= 0)
else if (dt.Rows.Count == 1)
NewsModel newModel = new NewsModel();
DataRow dr = dt.Rows[0];
newModel.StrNewsName = dr[&name&].ToString();
newModel.StrNewsAuthor = dr[&author&].ToString();
newModel.StrAddTime = dr[&time&].ToString();
newModel.StrNewsContent = dr[&content&].ToString();
newModel.Sort = (int)dr[&sort&];
return newM
throw new Exception(&出现异常!&);
}这里的这个NewsDALL类,主要是来完成有关新闻需要对数据库的各种操作,当然了,这只是这个类的一部分,主要是来演示NewsDALL类怎样调用SqlHelper类中的方法,来完成对数据库的操作的。
3)接下来就是最后一层,业务逻辑层了。
业务逻辑层的话主要来处理视图层和数据库访问层之间的关系的。当然了,也可以直接在视图层调用数据库访问层,但是对于关系来说可能会增加复杂性,所以前辈们就专门的抽象出来一个业务逻辑层,把所有的业务逻辑关系都在这一层处理清楚之后再,访问数据库访问层,进行对数据的操作。(当然这是我自己的理解,如果有什么不对的话,请大家指正)
在我这次的项目中,貌似我的这一层完全是多余的,因为不需要什么太多的业务逻辑的处理,可以完全在视图层直接访问数据库访问层的。
还是使用代码说话吧,当然这个仍然是NewsBLL类代码的一部分:
/// &summary&
///业务逻辑层主要处理视图层和数据库访问直接的关系
/// &/summary&
public class NewsBLL
//完成对数据库的添加
public static int AddNew(NewsModel model)
NewsDALL newDALL = new NewsDALL();
return newDALL.AddNews(model);
//完成对数据的删除
public static int DeleteNew(int i)
NewsDALL newDALL = new NewsDALL();
return newDALL.DeleteNew(i);
//返回一个新闻分类的对象
public static NewsModel GetModel(int intSort)
NewsModel model = new NewsModel();
if (intSort == 1)
model.StrNewSort1 = &学院新闻&;
model.StrNewSort2 = &&;
model.StrNewSort3 = &&;
else if (intSort == 2)
model.StrNewSort1 = &公告通知&;
model.StrNewSort2 = &&;
model.StrNewSort3 = &&;
..........
接下来就是在视图层来通过访问,业务逻辑层来和实体层,来玩成所需要的数据操作了。
还是使用代码来描述吧,这个代码主要来完成对数据进行添加:
public void InsertData()
NewsModel newModel = new NewsModel();
newModel.StrNewsName = this.TextBox1.T
newModel.StrNewsAuthor = this.TxtBoxAuthor.T
newModel.StrAddTime = this.TxtDate.T
newModel.StrNewsContent = Server.HtmlDecode(FCKeditor1.Value);
newModel.Sort =Convert.ToInt32( this.DropDownList2.SelectedValue.ToString());
//NewsBLL newBLL = new NewsBLL();
int nResult= NewsBLL.AddNew(newModel);
if (nResult != 0)
Response.Write(&&script&alert('添加成功!')&/script&&);
Response.Write(&&script&alert('添加失败!')&/script&&);
}我以前自己做的图,被大家指出了很多的错误。所以,我就引用了网络上的一个图片来解释(如果侵害了您的版权,请您联系我)
据我自己的理解,三层架构可以算是一个团队项目开发的基本框架,在这个框架的基础上可以满足一些设计模式的需要。当然可以满足模块开发的需要。
对于我这次的开发项目来说,收获还是很多的,以前仅仅是知道有三层架构这个东西,也看书,照着别人的代码写过,但是却不能体会到这其中的真正意义。
优点:①使代码的重用更加的高了,不需要像以前做项目,每次在一个页面反复的编写操作数据库的代码,而使用三层架构的话,只需要把注意力放在业务逻辑层& & &的业务逻辑的处理和数据库访问层的sql语句的编写。
&②代码的整洁性,和易用性更加的高了。因为不同的操作都分别放在了不同的层,所以代码逻辑更加清晰,如果做好注释的话,别人能够更加清楚的理解& &&编写者的意图。
&③可扩展型更加的高了,根据需要在不同的层编写代码,然后调用就可以了。
&④非常利于团队开发。
当然了,三层架构的有点不仅仅有这些,不然也不会成为现在企业开发的基本框架,这只不过是我在开发中明显的发现的优点,拿出来跟大家分享一下。
缺点:①就是性能上肯定比以前直接在相应的页面编写数据库操作代码上有点降低。但是这个完全是可以接受的,况且,对于我现在的水平就是代码质量上可定还& & &有待提高,有更大的优化空间。
&&②就是在我的项目中,我觉得最大的浪费就是可以在视图层直接访问数据库访问层,因为要处理的业务逻辑实在是不多,所以还是有点代码冗余吧。所以,& & &以后还是要跟据自己项目的需要,来灵活的使用,不一定要按照规定必须这样做。
这仅仅是我的一点拙见,有什么地方错误,请大家积极指正。也欢迎大家跟我交流。
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:385789次
积分:5069
积分:5069
排名:第3705名
原创:101篇
转载:15篇
评论:335条
文章:21篇
阅读:62364
文章:11篇
阅读:26652
阅读:21562
(4)(5)(1)(1)(1)(1)(4)(8)(2)(5)(18)(3)(1)(1)(9)(5)(2)(1)(4)(1)(4)(1)(8)(5)(1)(8)(1)(14)asp.net编程的相关问题_百度知道
asp.net编程的相关问题
Count &;username& 1)
Response.Close().Redirect(&);];.ToString() + &创建订单项
if (GridView1;
if (javascript'
SqlConnection con = new SqlConnection(constr);useName&quot.N&
SqlCommand comm = new SqlCommand(数据库操作
string constr = Convert,去商品区看看.RConnectionString&quot.Write(&
SqlCommand selcmd = new SqlCommand('] == null)
R& + DateTscript&gt.ExecuteNonQuery().ExecuteReader();&#39!'
SqlDataReader dr =]);&您还没有挑选商品;,''script language=&#39在讲购物车的立刻购买插入订单的时候;select top 1 * from Orders order by OrderID desc&quot.aspx&quot, con);&quot.ConnectionStrings[&&lt.Read())
strOrderID = dr[0];insert into [Orders] values(')&;),'&#47.ToString();/&
string strsql = & + OrderID + &&#47.ToString(ConfigurationManager,废话的一边去……急急急急求……整个代码如下;
strsql = &quot.Open();
string OrderID.ToString() + &alert(&#39,出现了这个问题;
if (Session[&quot,请有知识认识帮帮忙, con);); + Session[&quot:
com/zhidao/wh%3D600%2C800/sign=ddaf21fc4758/cefc1e178a82b9d738dad.baidu.baidu.hiphotos://c.com/zhidao/wh%3D450%2C600/sign=/zhidao/pic/item/cefc1e178a82b9d738dad.hiphotos.jpg" target="_blank" title="点击查看大图" class="ikqb_img_alink"><img class="ikqb_img" src="http://c.baidu://c<a href="http.hiphotos.jpg" esrc="http
提问者采纳
&#39;& + Session[&quot.在这条语句之前; + DateT加入;&#39;,&#39;];出错的原因是你没有定义strsql:string strsql=&;&#39;)&;insert into [Orders] values(&#39.ToString() + &quot,&#39.ToString() + &username&quot.N& + OrderID + &&quot: strsql = &&quot
提问者评价
非常对,转身自己弄好了,就没有 即使处理,问题,O(∩_∩)O谢谢了
其他类似问题
为您推荐:
其他3条回答
+ DateT&#39;&#39;];)& + Session[&quot.ToString() + &quot? 回答慢了;;,&#39,楼上说得对strsql = &quot,&#39; + OrderID + &insert into [Orders] values(&#39.ToString() + &strsql 在何处定义的;username&&;&quot.N&#39;&quot,变量strsql没有定义
额,楼主貌似好2
真强悍!你搞编程设计的么?
您可能关注的推广
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁C# DataSet和DataTable详解-asp.net-电脑编程网C# DataSet和DataTable详解作者:佚名 和相关&&
1、创建DataSet对象:DataSet ds = new DataSet("DataSetName");
&2、查看调用SqlDataAdapter.Fill创建的结构 &&&& da.Fill(ds,"Orders");
&&&& DataTable tbl = ds.Table[0];
&&&& foreach(DataColumn col in tbl.Columns)
&&&&&&&& Console.WriteLine(col.ColumnName);
3、查看SqlDataAdapter返回的数据 ①、DataRow对象&&&& DataTable tbl = ds.Table[0];
&&&& DataRow row = tbl.Row[0];
&&&& Console.WriteLine(ros["OrderID"]);
②、检查存储在DataRow中的数据 &&&& DataTable tbl = row.T
&&&& foreach(DataColumn col in tbl.Columns)
&&&&&&&& Console.WriteLine(row[col]);
③、检查DatTable中的DataRow对象 &&&&&&&&&&&& foreach(DataRow row in tbl.Rows)
&&&&&&&&&&&&&&&& DisplayRow(row);
4、校验DataSet中的数据 ①、校验DataColumn的属性:ReadOnly,AllowDBNull,MaxLength,Unique
②、DataTable对象的Constrains集合:UiqueConstraints,Primarykey,ForeignkeyConstraints
通常不必刻意去创建ForeignkeyConstraints,因为当在DataSet的两个DataTable对象之间创建关系时会创建一个。
③、用SqlDataAdapter.Fill模式来检索模式信息
5、编写代码创建DataTable对象
①、创建DataTable对象:DataTable tbl = new DataTable("TableName");
②、将DataTable添加到DataSet对象的Table集合
&&&& DataSet ds = new DataSet();
&&&& DataTable tbl = new DataTable("Customers");
&&&& ds.Tables.Add(tbl);
&&&& DataSet ds = new DataSet();
&&&& DataTable tbl = ds.Tables.Add("Customers");
DataTable对象只能存在于至多一个DataSet对象中。如果希望将DataTable添加到多个DataSet中,就必须使用Copy方法或Clone方法。Copy方法创建一个与原DataTable结构相同并且包含相同行的新DataTable;Clone方法创建一个与原DataTable结构相同,但没有包含任何行的新DataTable。
③、为DataTable添加列
&&&& DataTable tbl = ds.Tables.Add("Orders");
&&&& DataColumn col =tbl.Columns.Add("OrderID",typeof(int));
&&&& col.AllowDBNull =
&&&& col.MaxLength = 5;
&&&& col.Unique =
&&&& tbl.PrimaryKey = new DataColumn[]{tbl.Columns["CustomersID"]};
&&&& 当设置主键时,AllowDBNull自动设置为F
④、处理自动增量列
&&&& DataSet ds = new DataSet();
&&&& DataTable tbl = ds.Tables.Add("Orders");
&&&& DataColumn col = tbl.Columns.Add("OrderID",typeof(int));
&&&& col.AutoIncrement =
&&&& col.AutoIncrementSeed = -1;
&&&& col.AutoIncrementStep = -1;
&&&& col.ReadOnly =
⑤、添加基于表达式的列
&&&& tbl.Columns.Add("ItemTotal",typeof(Decimal),"Quantity*UnitPrice");
6、修改DataTable内容 ①、添加新DataRow
&&&& DataRow row = ds.Tables["Customers"].NewRow();
&&&& row["CustomerID"] = "ALFKI";
&&&& ds.Tables["Customers"].Rows.Add(row);
&&&& object[] aValues ={"ALFKI","Alfreds","Anders","030-22222"};
&&&& da.Tables["Customers"].LoadDataRow(aValues,false);
②、修改当前行
修改行的内容逼供内不会自动修改中相应的内容,对行所做的修改被视为是随后将使用SqlDataAdapter对象来提交交给的待定的更改。
DataRow rowCustomer;
rowCustomer = ds.Tables["Custoemrs"].Rows.Find("ANTON");
if(rowCustomer == null)
//没有查找客户
rowCustomer["CompanyName"] ="NewCompanyName";
rowCustomer["ContactName"] ="NewContactName";
//推荐使用这种方式
DataRow rowCustomer;
rowCustomer = ds.Tables["Custoemrs"].Rows.Find("ANTON");
if(rowCustomer == null)
//没有查找客户
rowCustomer.BeginEdit();
rowCustomer["CompanyName"] ="NewCompanyName";
rowCustomer["ContactName"] ="NewContactName";
rowCustomer.EndEdit();
//null表示不修改该列的数据
obejct[] aCustomer ={null,"NewCompanyName","NewContactName",null}
DataRow rowCustomer;
rowCustomer = ds.Tables["Customers"].Rows.Find("ALFKI");
rowCustomer.ItemArray = aCustomer;
③、处理DataRow的空值
//查看是否为空
DataRow rowCustomer;
rowCustomer = ds.Tables["Customers"].Rows.Find("ALFKI");
if(rowCustomer.IsNull("Phone"))
Console.WriteLine("It's Null");
Console.WriteLine("It's not Null");
//赋予空值
rowCustomer["Phone"] = DBNull.Value;
④、删除DataRow
DataRow rowCustomer;
rowCustomer = ds.Tables["Customers"].Rows.Find("ALFKI");
rowCustomer.Delete();
⑤、清除DataRow
DataRow rowCustomer = ds.Tables["Customers"].Rows.Find("ALFKI");
rowCustomer.ItemArray = aCustomer;
da.Tables["Customers"].Remove(rowCustomer);
ds.Tables["Customers"].RemoveAt(intIndex);
⑥、使用DataRow.RowState属性 :Unchanged,Detached,Added,Modified,Deleted
private void DemonstrateRowState()
{ // Run a function to create a DataTable with one column. DataTable myTable = MakeTable();DataRow myRow;
// Create a new DataRow. myRow = myTable.NewRow();// Detached row. Console.WriteLine("New Row " + myRow.RowState);
myTable.Rows.Add(myRow);// New row. Console.WriteLine("AddRow " + myRow.RowState);
myTable.AcceptChanges();// Unchanged row. Console.WriteLine("AcceptChanges " + myRow.RowState);
myRow["FirstName"] = "Scott";// Modified row. Console.WriteLine("Modified " + myRow.RowState);
myRow.Delete();// Deleted row. Console.WriteLine("Deleted " + myRow.RowState);}
⑦、检查DataRow中的挂起更改
DataRow rowCustomer;
rowCustomer = ds.Tables["Customers"].Rows.Find("ALFKI");
rowCustomer["CompanyName"] = "NewCompanyName";
string strNewCompanyName,strOldCompanyName;
Console.WriteLine(rowCustomer["CompanyName",DataRowVersion.Current]);
Console.WriteLine(rowCustomer["CompanyName",DataRowVersion.Original]);
1、DataSet①、属性&CaseSensitive:用于控制DataTable中的字符串比较是否区分大小写。
DataSetName:当前DataSet的名称。如果不指定,则该属性值设置为"NewDataSet".如果将DataSet内容写入XML文件,DataSetName是XML文件的根节点名称。 DesignMode:如果在设计时使用组件中的DataSet,DesignMode返回True,否则返回False.
HasErrors:表示DataSet中的DataRow对象是否包含错误。如果将一批更改提交给数据库并将DataAdapter对象的ContinueUpdateOnError属性设置为True,则在提交更改后必须检查DataSet的HasErrors属性,以确定是否有更新失败。
NameSpace和Prefix:指定XML命名空间和前缀
Relations:返回一个DataRelationCollection对象。
Tables:检查现有的DataTable对象。通过索引访问DataTable有更好的性能。
②、方法AcceptChanges和RejectChanges:接受或放弃DataSet中所有挂起更改。调用AcceptChanges时,RowState属性值为Added或Modified的所有行的RowState属性都将被设置为UnChanged.任何标记为Deleted的DataRow对象将从DataSet中删除。调用RejectChanges时,任何标记为Added的DataRow对象将会被从DataSet中删除,其他修改过的DatRow对象将返回前一状态。
Clear:清除DataSet中所有DataRow对象。该方法比释放一个DataSet然后再创建一个相同结构的新DataSet要快。
Clone和Copy:使用Copy方法会创建与原DataSet具有相同结构和相同行的新DataSet.使用Clone方法会创建具有相同结构的新DataSet,但不包含任何行。
GetChanges:返回与原DataSet对象具有相同结构的新DataSet,并且还包含原DataSet中所有挂起更改的行。
GetXml和GetXmlSchema:使用GetXml方法得到由DataSet的内容与她的架构信息转换为XML格式后的字符串。如果只希望返回架构信息,可以使用GetXmlSchema.
HasChange:表示DataSet中是否包含挂起更改的DataRow对象。
Merge:从另一个DataSet、DataTable或现有DataSet中的一组DataRow对象载入数据。
ReadXml和WriteXml:使用ReadXml方法从文件、TextReader、数据流或者XmlReader中将XML数据载入DataSet中。
Reset:将DataSet返回为未初始化状态。如果想放弃现有DataSet并且开始处理新的DataSet,使用Reset方法比创建一个DataSet的新实例好。
③、事件MergeFailed:在DataSet的Merge方法发生一个异常时触发。
&2、DataTable①、属性
ColumnChanged:在列的内容被改变之后触发
ColumnChangding:在列的内容被改变之前触发
RowChanged,RowChanging,RowDeleted,RowDeleting.
3、DataColumn
4、DataRow
HasError:确定行是否包含错误。
Item:通过指定行的列数,列的名称或DataColumn对象本身,访问列的内容。
ItemArray:获取或设置行中所有列的值。
RowError:返回一个包含行错误信息的字符串。
RowState:返回DataRowState枚举中的值来表示行的当前状态。
Table:返回DataRow对象所在的DataTable.
AcceptChanges和RejectChanges:提交和放弃挂起更改。
BeginEdit、CancelEdit、EndEdit
ClearErrors:清除DataRow中所有的错误。
Delete:Delete方法实际上并不从DataRow表的Row集合中删除该DataRow.当调用DataRow对象的Delete方法时,ADO.NET将该行标记为删除,之后调用SqlDataAdapter对象的Update方法来删除其在数据库中对应的行。
如果希望彻底删除DataRow,可以调用Delete方法,接着再调用它的AccepteChanges方法,还可以使用DataRowCollection对象的Remove方法完成相同的任务。
3 如何遍历DataSetforeach(DataTable dt in dataSet.Tables) foreach(DataRow dr in dt.Rows) foreach(DataColumn dc in dr.Table.Columns) Console.WriteLine(dr[dc]);
浅谈DataSet 的用法 DataSet是ADO.NET开发人员为方便数据处理开发出来的,是数据的集合,是为解决DataReader的缺陷设计的,DataReader数据处理速度快,但它是只读的, 而且一旦移到下一行,就不能查看上一行的数据,DataSet则可以自由移动指针。DataSet的数据是与数据库断开的。DataSet还可用于多层应用程序中,如果应用程序运行在中间层的业务对象中来访问数据库,则业务对象需将脱机数据结构传递给客户应用程序。
  DataSet的功能:浏览、排序、搜索、过滤、处理分级数据、缓存更改等。还可以与XML数据互换。DataSet中可包括多个DataTable,可将多个查询结构存到一个DataSet中,方便操作,而DataTable中又包括多个DataRow、DataColumn,可通过这些DataRow、DataColumn来查看、操作其中的数据,而需将操作结果返回给数据库的话,则可以调用DataAdapter的Update方法。
  DataSet的操作:
DataSet ds=new DataSet(); DataTable dt=new DataTable("newTable"); ds.Tables.Add(dt);
DataSet ds=new DataSet(); DataTable dt=ds.Tables.Add("newTable"); 上述两种方法都可以在DataSet中添加一个DataTable,看需要而进行选择。添加DataTable后,需向其中添加行和列。
DataSet ds=new DataSet(); DataTable dt=ds.Tables.Add("newTables"); DataColumn col=dt.Columns.Add("newColumn",typeof(int)); col.AllowDBNull= col.MaxLength=4; col.Unique=
上述代码向DataSet中的DataTable中添加名为”newColumn”,类型为int且不为空,最大长度为4和唯一性为真的列。
dt.PrimaryKey=new DataColumn[]{dt.Columns["ID"]} 这段代码是继续上面代码的,为一个DataTable中添加一个主键列,主键列是一个数据组,如有多个主键,只需在数组中添加一个列即可。如下:
dt.PrimaryKey=new DataColumns[]{dt.Columns["OrderID"],dt.Columns["ProductID"]} 添加外键:
ForeignKeyC fk=new ForeignKeyConstraint(ds.Tables["Customers"].Columns["CustomerID"],ds.Tables["Orders"].Columns["CustomerID"]); ds.Tables["Orders"].Constraints.Add(fk); //上述代码假如已经为Cusomers表和Orders创建了主键,
相关资料:|||||||C# DataSet和DataTable详解来源网络,如有侵权请告知,即处理!编程Tags:                &                    }

我要回帖

更多关于 aspnet是什么意思 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信