none
請問使用ASP.NET與ADO.NET 進階用法 RRS feed

  • 問題

  • 各位大大前輩們好!!

    小弟我想請教一個問題算是新手必問的吧!!

    我目的是要對資料庫進行存取(查詢、新增、修改、刪除)

    於是我就個別用以下的連線語法寫四次,四中次只有cmd.CommandText =這個地方不一樣而已

    不知有沒有進階的寫法,指導一下小弟我吧,再此感謝各位大大前輩們!!

    Conn.ConnectionString = "Data Source=.;Initial Catalog=TEST;Persist Security Info=True"; cmd.Connection = Conn; cmd.CommandText = "SELECT * FROM test"; da.SelectCommand = cmd; da.Fill(ds, "test");

    GridView1.DataSource = ds; GridView1.DataBind();

    cmd.CommandText = DELETE FROM test WHERE ID= '1'
    cmd.CommandText = UPDATE test SET ID='1',NAME='Mary',DEPT='HR',MAIL=''
    cmd.CommandText = INSERT INTO test (ID,NAME,DEPT,MAIL) VALUES('1','Mary','HR','Mary@xxx.com.tw')





    • 已編輯 jackbg 2012年6月19日 上午 08:00
    2012年6月19日 上午 07:58

解答

  • 古人說:『學而然後知不足』, 即使到了現在, 我還是常常發現很多自己不懂的『基本原理』, 所以這沒啥好擔心的, 只要能靜下心來好好地學習就有機會.

    舉個例子來說好了, 我剛開始寫 .Net 時, 首先打開 Visual Studio, 建一個新的 Windows Forms Application 專案, 然候畫面出現了一個 Form1, 接著從工具箱拉一個Button 過來, 然後點了它兩下, 在 Form1 的程式碼出現了這樣的東西:

    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
            
    End Sub

    好啦, 我以為這就叫做 "事件", 隔了一陣子, 發現了這玩意叫 "事件委派函式", 從此我知道了 "事件" 和 "事件委派函式" 雖然有關係, 但 "事件" 不等於 "事件委派函式"

    又隔了一陣子, 我又產生了一個疑問, 為什麼它會知道這個函式委派給哪個事件 ? 於是我看到一個關鍵字叫 Handles , 就去查了MSDN 文件庫, 學到了在 Visual Basic 中的 With Events 宣告與Handles 子句的意義. 順帶學了 AddHandler 與 RemoveHandler.

    再來我又不明白了, 為什麼它的參數是 (sender As System.Object, e As System.EventArgs) , 而有些其它的事件委派函式參數卻不是這樣, 於是我又再去 MSDN文件與茫茫網海找資料. 花了幾天瞭解到在宣告事件時會以委派型別宣告其委派函式簽章.

    然後再過了一大段時間, 我又問自己, 倒底把函式委派給事件這件事情內部是怎麼實做的 ? 這次就花更長的時間, 看了一大堆書和文件, 研究它內部的實作.

    沒有事情是一蹴可幾的 , 我們都是不斷地在看自己過去的 Code有什麼樣不明白的地方, 然後找資料研究,  而資料未必是程式碼, 很有可能只是一些原理的解釋.

    比方我會出一個題目給自己, 如果我的程式在極少數更動 (通常指更動寥寥數行參數) 的狀況下, 能否將整個資料來源從 SQL Server 改成 Access or SQL Compact.

    我花了很長很長的時間, 不斷地修改了大約十來個版本, 現在才出現一個讓自己略感滿意的東西. 很多時候需要改變的是習慣, 有些人習慣網路上找到 Code 就貼上, 所以一直會停在某的地方, 有些人看到Code 會仔細鑽研原作者這麼寫的原理, 理由和優劣勢, 以及是否能夠有更佳的寫法, 找更多的資料來研究, 這種人的進步就會非常快.

    另一種需要改變的習慣是思考, 要強迫自己思考通解而非特殊解, 我舉一個在其它論壇回答的問題當例子 [求救一下 一個數值進位的算式..], 事實上, 我大概只花了一分鐘列算式就解出來了, 你可以看一下其它人的建議多半朝向 select case 之類的方式. 原因不是因為我數學多強, 真正的原因在於我一開始的目的就確立要找出通解, 而不是特殊解. 很簡單的一種思考是, 假設一開始只有3種條件 0.05,0.1, 0.2 , 然後用 Select Case 這種特殊解去做, 後來發現還要多出兩百個條件, 那豈非 Select 個沒完 ? 這就是思考的習慣, 因為不到最後關頭, 絕不用特殊解, 只要有心, 人的潛力無窮.

    回歸到基本理論的問題, 我參與這論壇大概也超過3年了, 讀過許多的發問, 發現很多人寫了三五年程式依然會在某個很基本的點上鬼打牆, 原因在於沒有好好地再回頭理解基本原理, 寫程式和學數學不太一樣的是, 你不用把所有的基本搞懂就可以開始寫程式了, 但數學卻是如果你加法學不好, 乘法大概也不用學了. 所以很多時候都需要一再地複習那些被視為非常基本的原則, 老實說截自目前我還覺得自己尚有許多基本知識不明白之處, 因此書還是照讀, 文件還是照看, 練習的 code 還是照寫. 我最近在學 Metro App 的開發, 甚至是從 Hello World 的程式碼開始寫起.

    關於ORM, 小朱有一系列文介紹, 你可以仔細讀一讀, 然後想一想他的程式碼中有哪些原理是自己不瞭解的, 去加強它, 你會進步很快 http://www.dotblogs.com.tw/regionbbs/Tags/ORM/default.aspx


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。


    2012年6月19日 上午 11:31
    版主
  • Bill Chung大大 ,打從心底裡要說一個"服",香港叫"勁"!我也要跟你學習學習。

    Jackbg,其實這樣正是一個Developer所需的,不斷的學習、不斷的從不明白不知道開始


    大家一齊探討、學習和研究,謝謝!
    MCSD, MCAD, MCSE+I, MCDBA, MCDST, MCSA, MCTS, MCITP, MCPD,
    MCT, Microsoft Community Star(TW & HK),
    Microsoft MVP for VB.NET since 2003
    My MSMVP Blog

    • 已標示為解答 jackbg 2012年6月20日 上午 06:12
    2012年6月20日 上午 01:30
  • 比較簡單的做法就是把這段針對資料做CRUD的程式碼寫在Function,透過傳入參數決定是要做哪一項動作。

    不過SELECT或許可以獨立出來一個Function,用來回傳DataSet,其他INSERT、UPDATE、DELETE,我習慣的作法是當影響筆數大於0則回傳TRUE,否則回傳FALSE。

    PS:以上只是其中一種做法,供你做參考。


    以上說明若有錯誤請指教,謝謝。
    http://www.dotblogs.com.tw/terrychuang/

    • 已標示為解答 jackbg 2012年6月20日 上午 06:12
    2012年6月19日 上午 08:07
    • 已標示為解答 jackbg 2012年6月20日 上午 06:12
    2012年6月19日 上午 08:13
  • 你給了Select Query 進去一個SQLCommand後,把它放進SQLDataAdapter的SelectCommand,再用SQLCommandBuilder 去給你建立Insert,Update,Delete的 command。再bind它去DataGrid/GridView....等

    SqlCommandBuilder 類別

    如何使用SqlCommandBuilder來做到不寫T-SQL就可以對資料進行增刪修


    大家一齊探討、學習和研究,謝謝!
    MCSD, MCAD, MCSE+I, MCDBA, MCDST, MCSA, MCTS, MCITP, MCPD,
    MCT, Microsoft Community Star(TW & HK),
    Microsoft MVP for VB.NET since 2003
    My MSMVP Blog

    • 已標示為解答 jackbg 2012年6月20日 上午 06:12
    2012年6月19日 上午 08:35
  • 不曉得你所謂的 "進階" 的意思, 通常我們搞到最後都會自己寫 DAL 和 ORM .

    如果這是你要的, 那你需要把以下幾個東西練好:

    (1) ADO.NET : 這個是 MSDN 文件中關於 ADO.NET 最完整的章節, 資料非常豐富, 請把這些讀通, 瞭解 ADO.NET 的原理與各種應用

    (2) 物件導向基本原理: 因為在寫 DAL 或 ORM 會牽涉到非常多關於多型與繼承的問題, 所以對於這個基礎必須非常明白.

    (3) IOC (控制反轉) : 這是多型與繼承應用的一個『基本技巧』, 為什麼說基本, 因為它是下一個知識(5)的基本功.

    (4) 泛型: 在 ORM 中泛型的應用是很重要的.

    (5) Design Pattern: 當你把 (1)(2)(3)(4) 學熟了, 就要開始學 Design Pattern 的各種不同Pattern的架構,原理與實做 , 等到這些你都學會了,  你就可以寫出還算不錯的 ADO.NET 應用函式庫.


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。



    2012年6月19日 上午 09:08
    版主
  • Bill 叔說的那個數值進位我是用這邊這個方法:

    函數 CValue 將數值進位或捨去至特定數值

    配合 DateTime.Ticks 可以讓我用來算每小時5分之類的進位方式。


    論壇是網友平等互助 保證解答請至 微軟技術支援服務


    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。

    • 已標示為解答 jackbg 2012年6月20日 上午 06:19
    2012年6月20日 上午 06:05

所有回覆

  • 比較簡單的做法就是把這段針對資料做CRUD的程式碼寫在Function,透過傳入參數決定是要做哪一項動作。

    不過SELECT或許可以獨立出來一個Function,用來回傳DataSet,其他INSERT、UPDATE、DELETE,我習慣的作法是當影響筆數大於0則回傳TRUE,否則回傳FALSE。

    PS:以上只是其中一種做法,供你做參考。


    以上說明若有錯誤請指教,謝謝。
    http://www.dotblogs.com.tw/terrychuang/

    • 已標示為解答 jackbg 2012年6月20日 上午 06:12
    2012年6月19日 上午 08:07
    • 已標示為解答 jackbg 2012年6月20日 上午 06:12
    2012年6月19日 上午 08:13
  • 你給了Select Query 進去一個SQLCommand後,把它放進SQLDataAdapter的SelectCommand,再用SQLCommandBuilder 去給你建立Insert,Update,Delete的 command。再bind它去DataGrid/GridView....等

    SqlCommandBuilder 類別

    如何使用SqlCommandBuilder來做到不寫T-SQL就可以對資料進行增刪修


    大家一齊探討、學習和研究,謝謝!
    MCSD, MCAD, MCSE+I, MCDBA, MCDST, MCSA, MCTS, MCITP, MCPD,
    MCT, Microsoft Community Star(TW & HK),
    Microsoft MVP for VB.NET since 2003
    My MSMVP Blog

    • 已標示為解答 jackbg 2012年6月20日 上午 06:12
    2012年6月19日 上午 08:35
  • 不曉得你所謂的 "進階" 的意思, 通常我們搞到最後都會自己寫 DAL 和 ORM .

    如果這是你要的, 那你需要把以下幾個東西練好:

    (1) ADO.NET : 這個是 MSDN 文件中關於 ADO.NET 最完整的章節, 資料非常豐富, 請把這些讀通, 瞭解 ADO.NET 的原理與各種應用

    (2) 物件導向基本原理: 因為在寫 DAL 或 ORM 會牽涉到非常多關於多型與繼承的問題, 所以對於這個基礎必須非常明白.

    (3) IOC (控制反轉) : 這是多型與繼承應用的一個『基本技巧』, 為什麼說基本, 因為它是下一個知識(5)的基本功.

    (4) 泛型: 在 ORM 中泛型的應用是很重要的.

    (5) Design Pattern: 當你把 (1)(2)(3)(4) 學熟了, 就要開始學 Design Pattern 的各種不同Pattern的架構,原理與實做 , 等到這些你都學會了,  你就可以寫出還算不錯的 ADO.NET 應用函式庫.


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。



    2012年6月19日 上午 09:08
    版主
  • 初學者=>目前我個人定位在中間=>進階者=>高階者

    書上有教的基本都會用,書上沒教的都不會用

    處於在沒能力可以做到無中生有,雖然腦袋裡有想出需要哪些功能

    但要去實踐出來,就找不到方法(程式碼範本)把腦袋中的東西呈現出來

    常常被主管說腦袋轉不過來= =,指點後需要想很久才弄得出來東西

    那依Bill Chung大大的意思就是建議我重頭在來加強學習嚕!!

    還是另有它路.....

    我只知道OEM(Original Equipment Manufacturer) 製造商

    ORM是指 =>object-relational mapping (ORM) 物件關係對應是嗎??

    DAL 是指=>data access layer (DAL) 資料存取層是嗎??

    2012年6月19日 上午 10:07
  • 古人說:『學而然後知不足』, 即使到了現在, 我還是常常發現很多自己不懂的『基本原理』, 所以這沒啥好擔心的, 只要能靜下心來好好地學習就有機會.

    舉個例子來說好了, 我剛開始寫 .Net 時, 首先打開 Visual Studio, 建一個新的 Windows Forms Application 專案, 然候畫面出現了一個 Form1, 接著從工具箱拉一個Button 過來, 然後點了它兩下, 在 Form1 的程式碼出現了這樣的東西:

    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
            
    End Sub

    好啦, 我以為這就叫做 "事件", 隔了一陣子, 發現了這玩意叫 "事件委派函式", 從此我知道了 "事件" 和 "事件委派函式" 雖然有關係, 但 "事件" 不等於 "事件委派函式"

    又隔了一陣子, 我又產生了一個疑問, 為什麼它會知道這個函式委派給哪個事件 ? 於是我看到一個關鍵字叫 Handles , 就去查了MSDN 文件庫, 學到了在 Visual Basic 中的 With Events 宣告與Handles 子句的意義. 順帶學了 AddHandler 與 RemoveHandler.

    再來我又不明白了, 為什麼它的參數是 (sender As System.Object, e As System.EventArgs) , 而有些其它的事件委派函式參數卻不是這樣, 於是我又再去 MSDN文件與茫茫網海找資料. 花了幾天瞭解到在宣告事件時會以委派型別宣告其委派函式簽章.

    然後再過了一大段時間, 我又問自己, 倒底把函式委派給事件這件事情內部是怎麼實做的 ? 這次就花更長的時間, 看了一大堆書和文件, 研究它內部的實作.

    沒有事情是一蹴可幾的 , 我們都是不斷地在看自己過去的 Code有什麼樣不明白的地方, 然後找資料研究,  而資料未必是程式碼, 很有可能只是一些原理的解釋.

    比方我會出一個題目給自己, 如果我的程式在極少數更動 (通常指更動寥寥數行參數) 的狀況下, 能否將整個資料來源從 SQL Server 改成 Access or SQL Compact.

    我花了很長很長的時間, 不斷地修改了大約十來個版本, 現在才出現一個讓自己略感滿意的東西. 很多時候需要改變的是習慣, 有些人習慣網路上找到 Code 就貼上, 所以一直會停在某的地方, 有些人看到Code 會仔細鑽研原作者這麼寫的原理, 理由和優劣勢, 以及是否能夠有更佳的寫法, 找更多的資料來研究, 這種人的進步就會非常快.

    另一種需要改變的習慣是思考, 要強迫自己思考通解而非特殊解, 我舉一個在其它論壇回答的問題當例子 [求救一下 一個數值進位的算式..], 事實上, 我大概只花了一分鐘列算式就解出來了, 你可以看一下其它人的建議多半朝向 select case 之類的方式. 原因不是因為我數學多強, 真正的原因在於我一開始的目的就確立要找出通解, 而不是特殊解. 很簡單的一種思考是, 假設一開始只有3種條件 0.05,0.1, 0.2 , 然後用 Select Case 這種特殊解去做, 後來發現還要多出兩百個條件, 那豈非 Select 個沒完 ? 這就是思考的習慣, 因為不到最後關頭, 絕不用特殊解, 只要有心, 人的潛力無窮.

    回歸到基本理論的問題, 我參與這論壇大概也超過3年了, 讀過許多的發問, 發現很多人寫了三五年程式依然會在某個很基本的點上鬼打牆, 原因在於沒有好好地再回頭理解基本原理, 寫程式和學數學不太一樣的是, 你不用把所有的基本搞懂就可以開始寫程式了, 但數學卻是如果你加法學不好, 乘法大概也不用學了. 所以很多時候都需要一再地複習那些被視為非常基本的原則, 老實說截自目前我還覺得自己尚有許多基本知識不明白之處, 因此書還是照讀, 文件還是照看, 練習的 code 還是照寫. 我最近在學 Metro App 的開發, 甚至是從 Hello World 的程式碼開始寫起.

    關於ORM, 小朱有一系列文介紹, 你可以仔細讀一讀, 然後想一想他的程式碼中有哪些原理是自己不瞭解的, 去加強它, 你會進步很快 http://www.dotblogs.com.tw/regionbbs/Tags/ORM/default.aspx


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。


    2012年6月19日 上午 11:31
    版主
  • Bill Chung大大 ,打從心底裡要說一個"服",香港叫"勁"!我也要跟你學習學習。

    Jackbg,其實這樣正是一個Developer所需的,不斷的學習、不斷的從不明白不知道開始


    大家一齊探討、學習和研究,謝謝!
    MCSD, MCAD, MCSE+I, MCDBA, MCDST, MCSA, MCTS, MCITP, MCPD,
    MCT, Microsoft Community Star(TW & HK),
    Microsoft MVP for VB.NET since 2003
    My MSMVP Blog

    • 已標示為解答 jackbg 2012年6月20日 上午 06:12
    2012年6月20日 上午 01:30
  • Bill 叔說的那個數值進位我是用這邊這個方法:

    函數 CValue 將數值進位或捨去至特定數值

    配合 DateTime.Ticks 可以讓我用來算每小時5分之類的進位方式。


    論壇是網友平等互助 保證解答請至 微軟技術支援服務


    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。

    • 已標示為解答 jackbg 2012年6月20日 上午 06:19
    2012年6月20日 上午 06:05
  • 感謝各位大大前輩們的指導

    讓我體會到Developer之路沒有捷徑

    要靠自己不斷的去嘗試再嘗試

    唯有不斷的學習再學習

    前輩們"寶貴經驗"讓小弟我深深體會到了

    我會好好努力把基本功練好的!!

    謝謝各位大大前輩們!!!

    2012年6月20日 上午 06:18