近几天对DataSet的新认识_实用技巧

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

复制代码 代码如下:

DataGridViewCellStyle style = new DataGridViewCellStyle();   //自定义一种单元格样式. 
style.BackColor = Color.LightCyan;    //其实就是换种颜色. 
dataGridView1.RowHeadersVisible = false;  //觉得显示在行头的那个方块不好看,去掉~ 
dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect;   //单击某个单元格,选中其所在的行,这样看数据蛮方便. 
 dataGridView1.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.DisableResizing;   //用户不能调整列标题栏的大小. 
 dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;   //列宽度样式,最长的数据能全部显示,这样就不会出现"....."了. 
dataGridView1.AlternatingRowsDefaultCellStyle = style;   //奇数行的样式设置为先前定义的样式,让相邻行有颜色反差. 

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

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

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

复制代码 代码如下:

DataSet ds = null; 
SqlDataAdapter adapter = null; 
SqlCommandBuilder sqlbuilder = null; 

//该按钮读取数据,并绑定数据 
private void button1_Click(object sender, EventArgs e) 
        ...{ 
            ds = new DataSet(); 
            SqlConnection cn = new SqlConnection("Data Source=.;User ID=sa;Password=0;Initial Catalog=BMIS"); 
            SqlCommand cm = new SqlCommand(); 
            adapter = new SqlDataAdapter(cm); 
            sqlbuilder = new SqlCommandBuilder(adapter); 
            cm.Connection = cn; 
            cm.CommandType = CommandType.Text; 
            cm.CommandText = "select * from [providerInfo]"; 
            adapter.Fill(ds);          //该方法把得到的数据放入一个DataTable中 
            dataGridView1.DataSource = ds.Tables[0];    把数据绑定到DataGridView 
        } 

//向数据库返回修改的数据. 
private void button2_Click(object sender, EventArgs e) 
        ...{ 
            adapter.Update(ds);  
        } 

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

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

而新增一行的语句是"exec sp_executesql N'INSERT INTO [providerInfo] ([name], [address], [telNo], [tradeSum], [remark]) VALUES (@p1, @p2, @p3, @p4, @p5)', N'@p1 varchar(2),@p2 varchar(8000),@p3 varchar(8000),@p4 int,@p5 varchar(8000)', @p1 = 'TT', @p2 = NULL, @p3 = NULL, @p4 = NULL, @p5 = NULL"

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

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

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

时间: 2024-09-26 05:22:03

近几天对DataSet的新认识_实用技巧的相关文章

ADO.Net 类型化DataSet的简单介绍_实用技巧

一.弱类型DataSet的缺点:1.只能通过列名引用,dataset.Tables[0].Rows[0]["Age"],如果写错了列名编译时不会发现错误,因此开发时必须要记着列名.2.int age=Convert.ToInt32(dataset.Rows[0]["Age"]),取到的字段的值是object类型,必须小心翼翼的进行类型转换,不仅麻烦,而且容易出错.3.将DataSet传递给其他使用者,使用者很难识别出有哪些列可以供使用.4.运行时才能知道所有列名,数

asp.net Gridview行绑定事件新体会_实用技巧

在网上搜了一下事件执行顺序,并经过测试在有分页的情况下是不正确的.事件执行顺序: 一.GridView 显示绑定的数据(默认为5行): 复制代码 代码如下: DataBinding RowCreated:Header[0] RowDataBound RowCreated:DataRow[1] RowDataBound RowCreated:DataRow[2] RowDataBound RowCreated:DataRow[3] RowDataBound RowCreated:DataRow[4

详细说明asp.net中datareader 和 dataset 的区别_实用技巧

1. 获取数据的方式    DataReader为在线操作数据, DataReader会一直占用SqlConnection连接,在其获得数据过程中其它操作不可以再使用SqlConnection连接对象. 复制代码 代码如下: while(datareader.read()){..............}dataview.datasource=datareader;dataview.databind(); DataSet为离线操作数据,DataSet会将数据一次性读入内存,然后断开连接,这时其它

C# XML操作 代码大全(读XML,写XML,更新,删除节点,与dataset结合等)第1/2页_实用技巧

已知有一个XML文件(bookstore.xml)如下: Corets, Eva 5.95 1.插入节点 往节点中插入一个节点: 复制代码 代码如下: XmlDocument xmlDoc=new XmlDocument(); xmlDoc.Load("bookstore.xml"); XmlNode root=xmlDoc.SelectSingleNode("bookstore");//查找 XmlElement xe1=xmlDoc.CreateElement(

ASP.NET用DataSet导出到Excel的方法_实用技巧

复制代码 代码如下:  /读取临时文件    GYYW.DA.Common.Base_SqlDataBase daBZDM = new GYYW.DA.Common.Base_SqlDataBase();    DataSet dsBZDM = daBZDM.GetDataSetBySql("select QCDM,MC,GG from WG_BZDM where QCDM like '02%'");    //同时将虚拟目录下的Data作为临时文件目录.    string urlP

asp.net用url重写URLReWriter实现任意二级域名 新_实用技巧

一般用百度搜的朋友都是对这个不了解但又急需要用的,我想,再多的语言也比不过一句代码.于是我把今天帮朋友时候写的一个小例子传了上来.这个小例子的目的是实现对任意url的重写(但不包括二级域名的,有需要二级域名的也可以先了解下url重写的概念). 这个小项目的制作过程如下 1.需要对诸如http://jb51.net/viewnews/2009/3/2.html的url进行重写.将其重写为http://jb51.net/viewnews.aspx?id=2&year=2009&month=3

ASP.NET2.0新特性概述_实用技巧

ASP.NET技术从1.0版本升级到1.1变化不是很大.然而,从ASP.NET 1.x升级到2.0,却不是件轻而易举的事情.ASP.NET 2.0技术增加了大量方便.实用的新特性.ASP.NET 2.0主要提供控件.页面框架.服务与APIs等3个方面的技术特性.       控件 在ASP.NET 1.x时代,由于内置服务器控件数量有限.功能覆盖面窄,因此,开发人员怨声载道.为了消除这个技术软肋,ASP.NET 2.0做出了突破性改进.在ASP.NET 2.0中,新增数十个服务器控件.根据控件功

asp.net使用DataSet的ReadXml读取XML文件及Stream流的方法_实用技巧

本文实例讲述了asp.net使用DataSet的ReadXml读取XML文件及Stream流的方法.分享给大家供大家参考,具体如下: string strxml = "<xml><m><a>1</a><b>2</b></m><m><a>11</a><b>22</b></m><m><a>111</a><

VS2015中C#版本6.0的新特性 你需要知道_实用技巧

本文列出个人感觉比较有用的几个新功能,供大家参考,具体内容如下 注意:这些新特性只能用于VS2015及更高版本,无法在VS2013.VS2010等低版本中使用.当然,如果你不喜欢这些新的特性,仍然可以继续使用原来的用法(所以说它是新的语法糖). 1.自动属性初始化的改进(有用) 原来的用法(声明时无法同时初始化),例如: class MyClass { public int Age { get; set; } public string Name { get; set; } public MyC