如何以呼叫 SQL Server 使用 Visual Basic.NET 將程序儲存在 ASP.NET 中

文章翻譯 文章翻譯
文章編號: 306574 - 檢視此文章適用的產品。
全部展開 | 全部摺疊

在此頁中

結論

這份文件中,示範了如何使用 ASP.NET 和 ADO.NET若要建立並呼叫儲存 Microsoft SQL Server 的 Visual Basic.net使用輸入的參數和輸出參數的程序。

程式碼在這個範例文件第一個檢查是否就可以在預存程序建立存在於資料庫。如果預存程序不存在,程式碼建立會接受一個參數,若要搜尋的最後一個名稱為基礎在Authors資料表的預存程序並傳回符合的資料列,輸出參數中所傳回的資料列數目。

這份文件也將示範如何建立 Web 表單,提供簡單的使用者介面。Web 表單包含下列項目:
  • 使用者在其中輸入搜尋文字方塊中條件。
  • 顯示搜尋結果的DataGrid控制項。
  • 標籤控制項便會傳回記錄的數目。
  • 按鈕控制項的按鈕時呼叫預存程序按下。

需求

以下概括列出建議的硬體的軟體,網路基礎結構和所需的 service pack:
  • Microsoft SQL Server 7.0 或更新版
  • Microsoft Visual Studio.NET
  • Microsoft Visual Basic.NET
  • 若要建立的預存程序的權限資料庫
本文假設您已熟悉下列主題:
  • SQL Server 預存程序

建立一個 ASP.NET 專案並加入控制項

在本章節中,您可以建立一個 ASP.NET 專案和建置基本使用者介面。請注意這些步驟使用 Microsoft Visual Basic.NET程式碼。若要建立專案時,請依照下列步驟執行:
  1. 按一下 [開始,指向 [程式集、 指向 [ Microsoft Visual Studio.NET中,,然後按一下 [ Microsoft Visual Studio.NET
  2. 在 Visual Studio.NET 啟動頁面上,按一下 [新增專案
  3. 在 [新增專案] 對話方塊中,按一下 [專案類型] 下的 [ Visual Basic 專案,然後按一下 [範本] 下的 [ ASP.NET Web 應用程式
  4. 在 [名稱] 方塊中,輸入您的 Web 應用程式的名稱,然後按一下[確定]
  5. 將下列的伺服器控制項加入至 Web Form,並設定屬性表中列出:
    摺疊此表格展開此表格
    控制項ID 屬性Text 屬性
    標籤lblLastName輸入作者的姓氏:
    文字方塊txtLastName%
    按鈕btnGetAuthors取得作者
    標籤lblRowCount(列數)

  6. 將從工具箱] 中的DataGrid的伺服器控制項至 Web 表單,並設定名稱屬性 GrdAuthors.
  7. 方格中,以滑鼠右鍵按一下,然後按一下 [表格自動格式設定
  8. 按一下 [專業版 1配置,,然後按一下[確定]

建立 GetAuthorsByLastName 預存程序

使用下列的異動性-SQL 程式碼建立GetAuthorsByLastName 預存程序:
Create Procedure GetAuthorsByLastName1 (@au_lname varchar(40), @RowCount int output)  
as 

select * from authors where au_lname like @au_lname; 

/* @@ROWCOUNT returns the number of rows that are affected by the last statement. */ 
select @RowCount=@@ROWCOUNT
				
這段程式碼包含兩個參數: @au_lname 和 @RowCount。的@au_lname 參數是輸入的參數,會取得搜尋字串搜尋"like" Authors資料表中。@RowCount 參數是使用輸出參數取得受影響的資料列的 @@ROWCOUNT 變數。

建立和執行預存程序

若要存取 SQL Server 資料庫,您必須匯入System.Data.SqlClient命名空間中,提供新的物件,例如SqlDataReaderAdd物件。若要從 SQL Server 資料庫中讀取順向類型資料流的資料列,您可以使用SqlDataReader資料配接器會表示一組資料命令和資料庫連接,您可以使用填滿資料集物件,並更新 SQL Server 資料庫。

ADO.NET也會引入DataSet物件,也就是資料的記憶體常駐表示,提供的一致、 關聯式程式設計模型,而不論資料來源。本章節中的程式碼會使用這些物件。
  1. 按兩下 Web 表單。
  2. 將下列程式碼加入至 [宣告] 區段的程式Web Form,它會顯示在視窗頂端的程式碼:
    Imports System.Data
    Imports System.Data.SqlClient
    					
  3. 請確認存在的預存程序並建立新的預存程序的sql 命令的使用與SqlDataReader物件的物件。若要對資料庫執行任何 SQL 命令,您可以使用sql 命令。然後呼叫ExecuteReader方法以傳回SqlDataReader,其中包含符合查詢的資料列的sql 命令

    新增下列的 Web Form 的Page_Load事件裡的程式碼:
    'Only run this code the first time the page is loaded.
    'The code inside the IF statement is skipped when you resubmit the page.
    If Not IsPostBack Then
        Dim MyConnection As SqlConnection
        Dim MyCommand As SqlCommand
        Dim MyDataReader As SqlDataReader
    
        'Create a Connection object.
        MyConnection = New SqlConnection("server=(local);database=pubs;Trusted_Connection=yes")
    
        'Create a Command object, and then set the connection.
        'The following SQL statements check whether a GetAuthorsByLastName stored procedure 
        'already exists.
        MyCommand = New SqlCommand("if object_id('pubs..GetAuthorsByLastName') is not null " + "begin" + " if objectproperty(object_id('pubs..GetAuthorsByLastName'), 'IsProcedure')= 1" + " select object_id('pubs..GetAuthorsByLastName')" + " else" + " return " + "end" + " else" + " return", MyConnection)
    
        With MyCommand
            'Set the command type that you will run.
            .CommandType = CommandType.Text
    
            'Open the connection.
            .Connection.Open()
    
            'Run the SQL statement, and then get the returned rows to the DataReader.
            MyDataReader = .ExecuteReader()
    
            'If any rows are retuned, the stored procedure that you are trying 
            'to create already exists. Therefore, try to create the stored procedure
            'only if it does not exist.
            If Not MyDataReader.Read() Then
                .CommandText = "create procedure GetAuthorsByLastName (@au_lname varchar(40), " & _ 
    
                                "@RowCount int output) " & _ 
    
                                " as select * from authors where au_lname like @au_lname; select @RowCount=@@ROWCOUNT"
                MyDataReader.Close()
                .ExecuteNonQuery()
            Else
                MyDataReader.Close()
            End If
    
            .Dispose()  'Dispose of the Command object.
            MyConnection.Close() 'Close the connection.
        End With
    End If
    					
  4. 在 [ btnGetAuthors ] 按鈕的Click事件中呼叫預存程序,然後使用Add物件來執行預存程序。您必須建立參數預存程序並將它附加至的Add物件的參數集合。

    Page_Load事件之後,加入下列程式碼:
    Private Sub btnGetAuthors_Click(ByVal sender As System.Object, _
     ByVal e As System.EventArgs) Handles btnGetAuthors.Click
        Dim DS As DataSet
        Dim MyConnection As SqlConnection
        Dim MyDataAdapter As SqlDataAdapter
    
        'Create a connection to the SQL Server.
        MyConnection = New SqlConnection("server=(local);database=pubs;Trusted_Connection=yes")
    
        'Create a DataAdapter, and then provide the name of the stored procedure.
        MyDataAdapter = New SqlDataAdapter("GetAuthorsByLastName", MyConnection)
    
        'Set the command type as StoredProcedure.
        MyDataAdapter.SelectCommand.CommandType = CommandType.StoredProcedure
    
        'Create and add a parameter to Parameters collection for the stored procedure.
        MyDataAdapter.SelectCommand.Parameters.Add(New SqlParameter("@au_lname", _
       SqlDbType.VarChar, 40))
    
        'Assign the search value to the parameter.
        MyDataAdapter.SelectCommand.Parameters("@au_lname").Value = Trim(txtLastName.Text)
    
        'Create and add an output parameter to Parameters collection. 
        MyDataAdapter.SelectCommand.Parameters.Add(New SqlParameter("@RowCount", _
        SqlDbType.Int, 4))
    
        'Set the direction for the parameter. This parameter returns the Rows returned.
        MyDataAdapter.SelectCommand.Parameters("@RowCount").Direction = ParameterDirection.Output
    
        DS = New DataSet() 'Create a new DataSet to hold the records.
        MyDataAdapter.Fill(DS, "AuthorsByLastName") 'Fill the DataSet with the rows returned.
    
        'Get the number of rows returned, and then assign it to the Label control.
        'lblRowCount.Text = DS.Tables(0).Rows.Count().ToString() & " Rows Found!"
        lblRowCount.Text = MyDataAdapter.SelectCommand.Parameters(1).Value & " Rows Found!"
    
        'Set the data source for the DataGrid as the DataSet that holds the rows.
        Grdauthors.DataSource = DS.Tables("AuthorsByLastName").DefaultView
    
        'Bind the DataSet to the DataGrid. 
        'NOTE: If you do not call this method, the DataGrid is not displayed!
        Grdauthors.DataBind()
    
        MyDataAdapter.Dispose() 'Dispose of the DataAdapter.
        MyConnection.Close() 'Close the connection.
    End Sub
    					
  5. 在 [方案總管中以滑鼠右鍵按一下.aspx 網頁,然後再按一下 設定為起始頁.
  6. 儲存專案,然後再按一下 [Visual Studio.NET 中的 [啟動。請注意編譯專案,確認預設的網頁就會執行。
  7. 在文字方塊中,輸入作者的姓氏,再按一下取得作者。請注意會呼叫預存程序,並傳回資料列會填入DataGrid

    您可以提供這類的 SQL Server 的型別搜尋字串G %它會傳回所有作者的最後一個名稱,開始以字母 「 G 」。

疑難排解

  • 如果您無法連線到資料庫,請確定連接字串正確地指向執行 SQL server伺服器。
  • 如果您可以連接至資料庫,但如果您遇到問題,當您嘗試建立預存程序,請確定您有正確的權限的資料庫中建立預存程序您正在連線。

?考

如需詳細資訊,請參閱下列主題Microsoft.NET Framework 軟體開發套件 (SDK) 文件:
ADO.NET 的概觀
http://msdn.microsoft.com/en-us/library/h43ks021.aspx

ADO.NET 資料集
http://msdn.microsoft.com/en-us/library/zb0sdh0b (VS.71).aspx

使用.NET 資料提供者存取資料
http://msdn2.microsoft.com/en-us/library/s7ee2dwt (vs.71).aspx
如需詳細資訊,請參閱下列書籍:
Wyke、 Allen R,蘇丹 Rehman 和李明俐 Leupen。 XML 程式設計 (核心參考).微軟出版品,2001年。
如需詳細資訊,請參閱下列 Microsoft 訓練 &憑證課程:
使用 ADO.NET 的 2389年設計程式
如需說明如何執行這項工作,藉由使用 [Microsoft 動態伺服器網頁,按一下 [下面的文件編號,檢視 「 Microsoft 中知識庫:
300488 如何執行 SQL 中,預存程序,從 ASP 網頁

屬性

文章編號: 306574 - 上次校閱: 2012年12月27日 - 版次: 8.0
這篇文章中的資訊適用於:
  • Microsoft ASP.NET 1.0
  • Microsoft ASP.NET 1.1
  • Microsoft ADO.NET 1.1
  • Microsoft Visual Basic .NET 2002 Standard Edition
  • Microsoft Visual Basic .NET 2003 Standard Edition
關鍵字:?
kbhowtomaster kbsqlclient kbsystemdata kbmt KB306574 KbMtzh
機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:306574
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。

提供意見

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com