一区二区久久-一区二区三区www-一区二区三区久久-一区二区三区久久精品-麻豆国产一区二区在线观看-麻豆国产视频

近幾天對DataSet的新認識

做管理軟件總是在和DataTable,DataSet,DataGridView打交道,以前經(jīng)常用,但是自己思考的問題不多,用的都是最笨的方法,做出來的都是最丑陋的界面和低效率的程序,上周某天晚上把DataGridView認真的研究了一下,主要是界面上的東西,覺得被我改進后的界面看起來就是不一樣了,呵呵~我覺得看起來還可以的界面代碼: 
復(fù)制代碼 代碼如下:
DataGridViewCellStyle style = new DataGridViewCellStyle();   //自定義一種單元格樣式. 
style.BackColor = Color.LightCyan;    //其實就是換種顏色. 
dataGridView1.RowHeadersVisible = false;  //覺得顯示在行頭的那個方塊不好看,去掉~ 
dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect;   //單擊某個單元格,選中其所在的行,這樣看數(shù)據(jù)蠻方便. 
 dataGridView1.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.DisableResizing;   //用戶不能調(diào)整列標題欄的大小. 
 dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;   //列寬度樣式,最長的數(shù)據(jù)能全部顯示,這樣就不會出現(xiàn)"....."了. 
dataGridView1.AlternatingRowsDefaultCellStyle = style;   //奇數(shù)行的樣式設(shè)置為先前定義的樣式,讓相鄰行有顏色反差. 

還有很多效果沒用~但是這樣簡單的幾行還是能蠻大的改善程序的美觀性~

      然后說說數(shù)據(jù)綁定的新認識,以前一直知道這東西,但不知道怎么用,也沒花時間去研究,但是這些天在CSDN的論壇里逛時,好象很多人都用這方面問題,才讓我有動力去研究這些用法.哎~有時候覺得自己蠻懶的~經(jīng)常要做數(shù)據(jù)處理方面的東西,竟然還是今天才第一次對它有深入的了解~慚愧!!

      說說具體的實現(xiàn)過程吧~連接SQL  Server數(shù)據(jù)庫的SqlConnection和SqlCommand必不可少~其次是SqlDataAdapter(其實這個也經(jīng)常用,但用的只是用它來讀數(shù)據(jù)),其實這個數(shù)據(jù)適配器用處很大,使用它可以很方便的從數(shù)據(jù)庫里讀取數(shù)據(jù),通過DataGridView顯示給用戶,用戶修改DataGridView里的數(shù)據(jù)后,再通過SqlDataAdapter可以把修改的數(shù)據(jù)反映到數(shù)據(jù)庫里,期間不需要我們寫任何操作數(shù)據(jù)庫代碼,.NET框架給我們包辦!而且這些數(shù)據(jù)只是存儲在DataSet或者DataTable這樣的緩存中,不用一直保持數(shù)據(jù)庫連接~哦~忘了,還需要使用SqlCommandBuilder來自動生成一些修改的SQL語句,簡單的實現(xiàn)代碼如下: 

復(fù)制代碼 代碼如下:
DataSet ds = null; 
SqlDataAdapter adapter = null; 
SqlCommandBuilder sqlbuilder = null; 

//該按鈕讀取數(shù)據(jù),并綁定數(shù)據(jù) 
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);          //該方法把得到的數(shù)據(jù)放入一個DataTable中 
            dataGridView1.DataSource = ds.Tables[0];    把數(shù)據(jù)綁定到DataGridView 
        } 

//向數(shù)據(jù)庫返回修改的數(shù)據(jù). 
private void button2_Click(object sender, EventArgs e) 
        ...{ 
            adapter.Update(ds);  
        } 
      用戶在DataGridView中做的數(shù)據(jù)改變會反映到它所綁定的DataTable里,最后使用SqlDataAdapter的Update方法,把修改反映到數(shù)據(jù)庫中,感覺使用的DataTable是一個中間存儲數(shù)據(jù)工具,而SqlDataAdapter是一個中間數(shù)據(jù)操作工具,兩者結(jié)合起來完成更新數(shù)據(jù)源的任務(wù).

      現(xiàn)在我想說一下這段代碼運行后在SQL  Server里具體做的是什么事情.首先,假設(shè)我在DataGridView顯示數(shù)據(jù)后,修改了一行數(shù)據(jù),增加了一行數(shù)據(jù).打開SQL  Server的事件探察器,對一次操作做了全程的監(jiān)聽.登錄,執(zhí)行查詢語句并無二樣,但是當我執(zhí)行一次Update時,都會調(diào)用一個名為sp_reset_connection的存儲過程,看名字猜想應(yīng)該是連接數(shù)據(jù)庫的意思,然后針對每一行修改的數(shù)據(jù)執(zhí)行一個名為exec sp_executesql的存儲過程,更新數(shù)據(jù)庫,比如我修改一行后的數(shù)據(jù)得到的是這么一條語句"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的工作機制了,記錄下發(fā)生變化的行,通過SqlCommanBuilder生成相應(yīng)的SQL語句,再執(zhí)行,達到修改目的.

        但是我做了一下對多表關(guān)聯(lián)的得到的數(shù)據(jù)進行修改,很遺憾,修改是不成功的,其實也不應(yīng)該成功,比如我在學(xué)生信息的導(dǎo)師的字段里存的僅僅是老師的ID,而顯示的是根據(jù)導(dǎo)師信息表關(guān)聯(lián)后導(dǎo)師的真實姓名,用戶如果修改了導(dǎo)師的姓名,反應(yīng)到學(xué)生表里的不可能是老師的ID,修改也就不成功.相信這個問題是有解決辦法的,只是我還沒發(fā)現(xiàn),應(yīng)該繼續(xù)研究!

       最后,羅嗦幾句說說今天的事情.下午體育課測50米,在搶跑的情況下跑了個6秒2~有點假~下課后和大一的幾個院隊的同學(xué)打球~打到5點~回來去澡堂洗澡我真怕我摔在澡堂里~實在沒力氣了~不過跟他們打球心情還是很好的,首先他們打球不菜,討厭和菜的人打~其次他們充滿活力的樣子讓我好象也回到了大一的感覺~天天打球的生活真好!明天早上英語課默單詞~~不想去了~~所以今晚決定stay  up  coding!!!還好還有點吃的~

AspNet技術(shù)近幾天對DataSet的新認識,轉(zhuǎn)載需保留來源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 狼人综合伊人网 | 五月婷婷激情六月 | 91在线综合 | 五月综合视频 | 久久精品国产精品亚洲红杏 | 免费亚洲一区 | a级国产乱理论片在线观看 a级国产乱理论片在线观看看 | 日韩在线观看中文字幕 | 91在线高清视频 | 激情视频网 | 国产精自产拍久久久久久 | heyzo在线播放4k岛国 | 最新毛片网站 | xxx日本在线 | 麻豆xfplay国产在线观看 | tube44欧美高清 | 亚洲欧美在线精品一区二区 | 最新国产精品视频免费看 | 激情五月激情综合网 | 男女男精品视频免费观看 | 在线观看91精品国产剧情免费 | 亚洲精品在线视频 | 亚洲国产精品激情在线观看 | 久久精品国产乱子伦多人 | 狠狠久久久久久亚洲综合网 | 欧美精品第56页在线视频观看 | 日韩久久久精品中文字幕 | 在线观看91精品国产入口 | 国产精品第六页 | 91av国产视频 | 久久国产精品99久久久久久牛牛 | 精品久久久久久乐 | 色黄视频 | a级精品九九九大片免费看 a加勒比一本东京 | 网红福利在线 | 伊人狼人综合 | 成人免费观看www视频 | 国产精品美女一区二区 | 成人午夜无人区一区二区 | 久久综合九色综合97伊人麻豆 | 性视频一区 |