搜尋此網誌

2023年5月5日 星期五

ASP 使用 SQL 預存程序

緣起:


    蠻久之前就想寫這篇了,但後來在忙些有的沒的。那時候看公司的 SQL 資料庫,發現裡面有不少寫好的 procedure,使用起來很像程式的 function,可以傳參數進去,之後在裡面用 t-sql 做操作,還能在 asp 端使用 sqlcommand 來呼叫 procedure 使用,感覺把這個學起來的話會很有用。

    在自己電腦上測試成功後,我想寫文章來記錄這東西大概怎麼用。


SQL Server 的 procedure:


    之前有把 Northwind 資料表給弄進我筆電的 SQL Server 裡,Northwind 有現成的資料表跟 procedure 可以使用,所以就直接拿它來當範例。
    

    可以在資料表的 "可程式性 -> 預存程式" 裡看到那些寫好的 procedure,這裡拿 dbo.CustOrderHist 來使用,對它點右鍵 -> 選擇 "修改" 就能看到它在寫些什麼。


    那個 set ansi_nulls on 跟 set quoted_identifier on 我沒特別去研究在幹啥 (之後有空再看看文件),但每個 procedure 檔幾乎都會加上它們。

    這個 procedure 有傳入一個 @CustomerID 的參數,主要是用來比對 Customers 表裡的 CustomerID。

    看一下Customers 表


    我就拿 "
ALFKI" 來當呼叫 dbo.CustOrderHist 的參數。新增一個查詢,用 exec 來執行 procedure


    可以正常執行並看到結果 ~~~


ASP Webconfig connectionStrings:


    再來要寫 asp 的程式,新增一個 Webform 專案。在開始寫程式之前,我想複習 connectionStrings 的使用。

    我把

<connectionStrings>
    <add name="BirdshiuConnectionString" connectionString="Data Source=LAPTOP-DB451NK0\SQLEXPRESS; Integrated Security=SSPI;Initial Catalog= Northwind;" providerName="System.Data.SqlClient" />
  </connectionStrings>

    加到專案 Web.config 的 <configuration> 標籤裡,在程式裡要取用的話,可以使用
ConfigurationManager.ConnectionStrings["BirdshiuConnectionString"].ConnectionString 來取得 connectionString (要加 using System.Configuration;)。


SqlConnection 與 SqlCommand:


    這邊直接放上程式碼


    18 行,拿到 connectionString。
    20 行,用 connectionString 初始 SqlConnection 實體,用 using 可以自動開啟跟關閉資料庫。
    22 行,初始一個 SqlCommand,第一個參數是我們要呼叫的 procedure。
    23 行,Timeout,預設是 30 秒 (這邊我是照抄公司的寫法),單位看來是毫秒。
    24 行,SqlCommand 的 Parameters 可以設定參數,AddWithValue 設定 @CustomerID = "ALFKI"。
    27 ~ 29 行,用 SqlDataAdapter 來把執行完的結果寫進 DataSet。SqlDataAdapter.Fill 把資料寫進我們指定的 DataSet 裡,我把寫進去的 DataTable 命名為 test 。
    30 行,從 dataSet 取出 test table
    32 行,逐一取出資料表裡的資料,它有兩個欄位,一個是 "ProductName",另一個是 "Total",然後輸用 Response 出到前端。

    最後開啟網頁,可以看到輸出的結果跟在 Sql Server Managemenet Studio 上看到的一樣


    

    

沒有留言:

張貼留言