之前的文章中介紹了使用ASP.NET MVC來開發一個博客系統,并且已將初具雛形,可以查看文章列表頁面,也可以點擊文章列表的其中一篇文章查看詳情,這已經完成了最開始需求分析的讀者的查看列表和查看文章兩個需求,但是現在最大的問題是文章數據仍然是“靜態”的。
所有數據被保存在內存中,系統在初始化時會自動添加被硬編碼在代碼文件中的數據,服務器每次重新啟動都只會保留這些數據,并且沒有提供“作者”的管理接口,“作者”沒法來管理這些數據,哪怕是可以進行管理也沒用,因為服務器重啟后數據就不存在了,這才是最糟糕的。最初使用HTML文件保存的文章雖然不易修改,但至少數據以文件的形式被保存在硬盤上,只要硬盤不壞,那么數據永遠不會丟失,但是現在不一樣了,要如何對數據進行持久化呢?
數據庫是最好的選擇(有的時候也會需要使用文件來管理數據,需要根據實際的應用場景來選擇,如配置文件),當然也可以使用文件的方式來管理數據,其實數據庫也是一種特殊的文件,只不過數據庫文件可以特有的訪問方式來對數據進行管理,如插入、刪除、更新和快速查找等等,這些功能都不需要自己編寫,它們是數據庫管理系統提供的(DBMS,Database Management System),數據庫又存在很多種類型,在一般企業級應用中常用的是關系型數據庫,主要有SQL Server、MySQL、Oracle、PostgreSQL等,它們都能夠為應用程序的數據存儲提供可靠保證。
對于ASP.NET來說最常用且提供支持最多的當然是SQL Server,但是由于MySQL和PostgreSQL都是開源的,一定程度上可以對其免費使用,所以也經常被.NET開發人員使用,本系列文章將使用SQL Server和MySQL兩種數據庫來實現數據存儲功能,同時也可以看出不同數據庫對一個應用程序會有哪些影響。
本文通過以下兩點來介紹如何在ASP.NET中使用SQL Server數據庫:
●使用SQL Server存儲數據
●在ASP.NET中訪問SQL Server
使用SQL Server存儲數據
1. 使用SQL Server創建Blog數據庫,以及Posts表,表字段對應Post類(如何使用SQL Server不在本系列文章范圍內,所以會忽略很多細節):
2. 在表中添加數據:
在ASP.NET中訪問SQL Server
文章前面說過數據庫其實也是一種特殊的文件,然后通過特有的訪問方式來使用它,那么ASP.NET 要如何連接并使用SQL Server呢?ADO.NET。(ADO.NET更多信息參考:http://blog.csdn.net/dreamcatchergo/article/details/9729525)
現在修改原有通過靜態數組獲取數據的BlogRepository,使用ADO.NET來獲取數據庫中的數據,ADO.NET相關的類在System.Data.dll程序集中,而ADO.NET對于不同的數據源提供了不同的數據提供器,它們用于連接不同的數據源:
SQL Server:System.Data.SqlClient
OleDb: System.Data.OleDb
Odbc: System.Data.Odbc
Oracle: System.Data.OracleClient
在本例中使用的是SQL Server,所以需要System.Data以及System.Data.SqlClient的支持,System.Data在創建項目時以及默認存在。
1. 通過Nuget包管理器安裝System.Data.Sqlclient庫:
2. 修改BlogRepository,讓其從數據庫中獲取數據:
上面代碼中有三個重要的對象分別是SqlConnection、SqlCommand、SqlDataReader,它們的作用分別是通過連接字符串連接數據庫、通過SQL語句及參數執行SQL(也可以執行存儲過程)、讀取執行SQL返回的結果。
3. 程序執行結果:
小結
本章介紹了如何使用數據庫來管理數據,然后通過ADO.NET來連接數據庫,從數據庫中獲取文章數據,然后顯示到頁面上,現在這個應用程序已經“動”起來了,僅需要更新數據庫的內容,頁面內容也將隨之而變。但存在一個問題就是每一次從數據庫獲取數據都要寫SQL語句然后從返回的數據集中獲取相應字段的數據用來創建實體對象。有沒有更好的方法來解決?
參考:
https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/
http://blog.csdn.net/dreamcatchergo/article/details/9729525
歡迎添加個人微信號:Like若所思。
歡迎關注我的公眾號,不僅為你推薦最新的博文,還有更多驚喜和資源在等著你!一起學習共同進步!
大家好,今日繼續講解VBA數據庫解決方案,今日的內容是第67講:內連接INNER如何在兩個不同的SQL中建立連接。今日的內容是之前內容的延伸,在前面的講解中我講了利用INNER連接的兩個數據源都是字段值與值的條件匹配,如果字段不是唯一值時數據會報錯。如何理解這個問題呢?所謂連接,目的是查詢,找出條件相同值的匹配,對于一對多,或者多對一的匹配,在內連接中是無法建立起對應關系的,多對一,或者一對多如何連接,不是我們關心的,我們關心的是如何把多值查詢變成值的唯一查詢,也就是說在連接前,要建立一個值的排重處理,這個排重處理我們在工作表中可以用數據透視表來完成,在此我們采用的方案是SQL語句。
我們還是以實例來詳細講解,實例,某策劃公司團隊中有兩個負責部門對于策劃項目的報價,在外聯部門報價是:
在每個項目中由若干個類別組成,每個類別需要的人數和價格如上,同時后勤部門的報價如下:
報價中含有對每個項目組成類別的占用車輛及需要的工具套數和單價。
當收到上述兩個部門報價后,我們要根據內容整理出總的報價,總報價中不必關心其中小類別的報價,只要匯總即可。我們要得出的只是項目,總人數,總價格,出動車輛,工具總套數,工具總價格等字段匯總,這個時候該如何處理呢?
思路:對于兩個數據表先分別進行數據的匯總,然后再用內連接同時連接這兩個匯總的數據,就可以得到我們的最終結果了。當然,思路很好建立,如何實現呢?
我們先看下面我給出的代碼:
Sub mynzRecords_67() '第67講 內連接Inner join 連接兩個SQL
Dim cnADO, rsADO As Object
Dim strPath, strSQL As String
Worksheets("67").Select
Cells.ClearContents
Set cnADO = CreateObject("ADODB.Connection")
Set rsADO = CreateObject("ADODB.Recordset")
strPath = ThisWorkbook.FullName
cnADO.Open "provider=Microsoft.ACE.OLEDB.12.0;extended properties='excel 12.0;hdr=yes;imex=1';data source=" & strPath
strSQL1 = "select 項目,SUM(人數) AS 總人數,SUM(價格) AS 總價格 from [數據4$] group by 項目"
strSQL2 = "select 項目,SUM(車輛) AS 出動車輛,SUM(工具套數) AS 工具總套數,SUM(工具套數*工具單價) AS " _
& "工具總價格 from [數據5$] group by 項目"
strSQL = "Select a.項目,a.總人數,a.總價格,b.出動車輛,b.工具總套數,b.工具總價格 From (" _
& strSQL1 & ") a Inner Join (" & strSQL2 & ") b " _
& "ON a.項目=b.項目 GROUP BY a.項目,a.總人數,a.總價格,b.出動車輛,b.工具總套數,b.工具總價格"
rsADO.Open strSQL, cnADO, 1, 3
For i = 1 To rsADO.Fields.Count
Cells(1, i) = rsADO.Fields(i - 1).Name
Next
Range("a2").CopyFromRecordset rsADO
rsADO.Close
cnADO.Close
Set rsADO = Nothing
Set cnADO = Nothing
End Sub
代碼截圖:
代碼解讀:
1 上述代碼先用SQL1 和SQL2 對"數據4" 工作表和"數據5"工作表進行數據的匯總。建立項目的匯總數據。
2 strSQL1 = "select 項目,SUM(人數) AS 總人數,SUM(價格) AS 總價格 from [數據4$] group by 項目"
上述SQL語句實現的的是對工作表4的匯總,上面有新的字段的設置。
3 strSQL2 = "select 項目,SUM(車輛) AS 出動車輛,SUM(工具套數) AS 工具總套數,SUM(工具套數*工具單價) AS " _
& "工具總價格 from [數據5$] group by 項目"
上述SQL語句實現的的是對工作表5的匯總,上面也有新的字段的設置。
4 strSQL = "Select a.項目,a.總人數,a.總價格,b.出動車輛,b.工具總套數,b.工具總價格 From (" _
& strSQL1 & ") a Inner Join (" & strSQL2 & ") b " _
& "ON a.項目=b.項目 GROUP BY a.項目,a.總人數,a.總價格,b.出動車輛,b.工具總套數,b.工具總價格"
利用上述的SQL語句,實現了對SQL1和SQL2的內連接,條件是a.項目=b.項目。
上述語句應用非常的方便,但我仍是反復的提醒大家注意,盡可能不要自己去寫代碼,我提倡的是搭積木的思想,建立起自己的代碼庫,用的時候,可以方便的利用即可。
下面看本實例的運行情況:
這樣就給出了,三個項目的報價清單。
今日內容回向:
1 如何建立連接于兩個SQL的內間接查詢?
2 應用于連接于兩個SQL的內間接查詢是什么樣的實際場景?