手机
当前位置:查字典教程网 >编程开发 >asp.net教程 >近几天对DataSet的新认识
近几天对DataSet的新认识
摘要:做管理软件总是在和DataTable,DataSet,DataGridView打交道,以前经常用,但是自己思考的问题不多,用的都是最笨的方法...

做管理软件总是在和DataTable,DataSet,DataGridView打交道,以前经常用,但是自己思考的问题不多,用的都是最笨的方法,做出来的都是最丑陋的界面和低效率的程序,上周某天晚上把DataGridView认真的研究了一下,主要是界面上的东西,觉得被我改进后的界面看起来就是不一样了,呵呵~我觉得看起来还可以的界面代码:

复制代码 代码如下:

DataGridViewCellStylestyle=newDataGridViewCellStyle();//自定义一种单元格样式.

style.BackColor=Color.LightCyan;//其实就是换种颜色.

dataGridView1.RowHeadersVisible=false;//觉得显示在行头的那个方块不好看,去掉~

dataGridView1.SelectionMode=DataGridViewSelectionMode.FullRowSelect;//单击某个单元格,选中其所在的行,这样看数据蛮方便.

dataGridView1.ColumnHeadersHeightSizeMode=DataGridViewColumnHeadersHeightSizeMode.DisableResizing;//用户不能调整列标题栏的大小.

dataGridView1.AutoSizeColumnsMode=DataGridViewAutoSizeColumnsMode.AllCells;//列宽度样式,最长的数据能全部显示,这样就不会出现"....."了.

dataGridView1.AlternatingRowsDefaultCellStyle=style;//奇数行的样式设置为先前定义的样式,让相邻行有颜色反差.

还有很多效果没用~但是这样简单的几行还是能蛮大的改善程序的美观性~

然后说说数据绑定的新认识,以前一直知道这东西,但不知道怎么用,也没花时间去研究,但是这些天在CSDN的论坛里逛时,好象很多人都用这方面问题,才让我有动力去研究这些用法.哎~有时候觉得自己蛮懒的~经常要做数据处理方面的东西,竟然还是今天才第一次对它有深入的了解~惭愧!!

说说具体的实现过程吧~连接SQLServer数据库的SqlConnection和SqlCommand必不可少~其次是SqlDataAdapter(其实这个也经常用,但用的只是用它来读数据),其实这个数据适配器用处很大,使用它可以很方便的从数据库里读取数据,通过DataGridView显示给用户,用户修改DataGridView里的数据后,再通过SqlDataAdapter可以把修改的数据反映到数据库里,期间不需要我们写任何操作数据库代码,.Net框架给我们包办!而且这些数据只是存储在DataSet或者DataTable这样的缓存中,不用一直保持数据库连接~哦~忘了,还需要使用SqlCommandBuilder来自动生成一些修改的SQL语句,简单的实现代码如下:

复制代码 代码如下:

DataSetds=null;

SqlDataAdapteradapter=null;

SqlCommandBuildersqlbuilder=null;

//该按钮读取数据,并绑定数据

privatevoidbutton1_Click(objectsender,EventArgse)

...{

ds=newDataSet();

SqlConnectioncn=newSqlConnection("DataSource=.;UserID=sa;Password=0;InitialCatalog=BMIS");

SqlCommandcm=newSqlCommand();

adapter=newSqlDataAdapter(cm);

sqlbuilder=newSqlCommandBuilder(adapter);

cm.Connection=cn;

cm.CommandType=CommandType.Text;

cm.CommandText="select*from[providerInfo]";

adapter.Fill(ds);//该方法把得到的数据放入一个DataTable中

dataGridView1.DataSource=ds.Tables[0];把数据绑定到DataGridView

}

//向数据库返回修改的数据.

privatevoidbutton2_Click(objectsender,EventArgse)

...{

adapter.Update(ds);

}

用户在DataGridView中做的数据改变会反映到它所绑定的DataTable里,最后使用SqlDataAdapter的Update方法,把修改反映到数据库中,感觉使用的DataTable是一个中间存储数据工具,而SqlDataAdapter是一个中间数据操作工具,两者结合起来完成更新数据源的任务.

现在我想说一下这段代码运行后在SQLServer里具体做的是什么事情.首先,假设我在DataGridView显示数据后,修改了一行数据,增加了一行数据.打开SQLServer的事件探察器,对一次操作做了全程的监听.登录,执行查询语句并无二样,但是当我执行一次Update时,都会调用一个名为sp_reset_connection的存储过程,看名字猜想应该是连接数据库的意思,然后针对每一行修改的数据执行一个名为execsp_executesql的存储过程,更新数据库,比如我修改一行后的数据得到的是这么一条语句"execsp_executesqlN'UPDATE[providerInfo]SET[telNo]=@p1WHERE(([id]=@p2)AND([name]=@p3)AND((@p4=1AND[address]ISNULL)OR([address]=@p5))AND((@p6=1AND[telNo]ISNULL)OR([telNo]=@p7))AND((@p8=1AND[tradeSum]ISNULL)OR([tradeSum]=@p9))AND((@p10=1AND[remark]ISNULL)OR([remark]=@p11)))',N'@p1varchar(3),@p2int,@p3varchar(2),@p4int,@p5varchar(3),@p6int,@p7varchar(4),@p8int,@p9int,@p10int,@p11varchar(3)',@p1='110',@p2=1,@p3='WT',@p4=0,@p5='ABC',@p6=0,@p7='0000',@p8=0,@p9=8,@p10=0,@p11='AAA'",

而新增一行的语句是"execsp_executesqlN'INSERTINTO[providerInfo]([name],[address],[telNo],[tradeSum],[remark])VALUES(@p1,@p2,@p3,@p4,@p5)',N'@p1varchar(2),@p2varchar(8000),@p3varchar(8000),@p4int,@p5varchar(8000)',@p1='TT',@p2=NULL,@p3=NULL,@p4=NULL,@p5=NULL"

这样看起来就比较明白SqlDataAdapter的工作机制了,记录下发生变化的行,通过SqlCommanBuilder生成相应的SQL语句,再执行,达到修改目的.

但是我做了一下对多表关联的得到的数据进行修改,很遗憾,修改是不成功的,其实也不应该成功,比如我在学生信息的导师的字段里存的仅仅是老师的ID,而显示的是根据导师信息表关联后导师的真实姓名,用户如果修改了导师的姓名,反应到学生表里的不可能是老师的ID,修改也就不成功.相信这个问题是有解决办法的,只是我还没发现,应该继续研究!

最后,罗嗦几句说说今天的事情.下午体育课测50米,在抢跑的情况下跑了个6秒2~有点假~下课后和大一的几个院队的同学打球~打到5点~回来去澡堂洗澡我真怕我摔在澡堂里~实在没力气了~不过跟他们打球心情还是很好的,首先他们打球不菜,讨厌和菜的人打~其次他们充满活力的样子让我好象也回到了大一的感觉~天天打球的生活真好!明天早上英语课默单词~~不想去了~~所以今晚决定stayupcoding!!!还好还有点吃的~

【近几天对DataSet的新认识】相关文章:

读写xml所有节点个人小结 和 读取xml节点的数据总结

如何改变asp.net项目名称

用DataReader还是DataSet?

ASP.NET 绑定DataSet中的多个表

使用pdfbox实现pdf文本提取和合并功能示例

垃圾代码二三行 ASPX小马

在ASP.NET中用存储过程执行SQL语句

Asp.net在线备份、压缩和修复Access数据库示例代码

ASP.NET实现用图片进度条显示投票结果

.NET逻辑分层架构总结

精品推荐
分类导航