SQL Server 2005 數據庫的存儲過程現在可以使用 .NET Framework 語言(如 Visual Basic、C# 和 C++)在托管代碼中進行編寫。使用托管代碼編寫的存儲過程稱為 CLR 存儲過程。
通過將“存儲過程”項添加到 SQL Server 項目,可以創建 SQL 存儲過程。成功部署到 SQL Server 之后,可通過與任何其他存儲過程相同的方式調用和執行在托管代碼中創建的存儲過程。
本演練演示如下任務:
創建新的“Windows 應用程序”項目。
在托管代碼中創建存儲過程。
將此存儲過程部署到 SQL Server 2005 數據庫。
創建在數據庫上測試存儲過程的腳本。
查詢數據庫中的數據,以確認是否正確執行了存儲過程。
先決條件
若要完成本演練,您需要:
到運行在 SQL Server 2005 之上的 AdventureWorks 示例數據庫的連接。有關更多信息,請參見 如何:安裝示例數據庫。
創建項目
創建新的 SQL Server 項目
從“文件”菜單創建一個新的項目。
選擇“SQL Server 項目”,將項目命名為 SQLCLRStoredPRocedure 并單擊“確定”。有關更多信息,請參見 如何:創建 SQL Server 項目。
連接到 SQL Server 2005 數據庫
本演練需要到運行在 SQL Server 2005 之上的 AdventureWorks 示例數據庫的連接。如果到 AdventureWorks 示例數據庫的連接在“服務器資源管理器”中可用,則該連接會在 “添加數據庫引用”對話框 中列出。
注意
在默認情況下,Microsoft SQL Server 中關閉了公共語言運行庫 (CLR) 集成功能。必須啟用該功能才能使用 SQL Server 項目項。若要啟用 CLR 集成,請使用 sp_configure 存儲過程的 clr enabled 選項。有關更多信息,請參見 啟用 CLR 集成。
連接到 AdventureWorks 示例數據庫
完成“添加連接”對話框,從而連接到包含在 SQL Server 2005 中的 AdventureWorks 示例數據庫。有關更多信息,請參見 添加/修改連接 (Microsoft SQL Server)。
- 或 -
在“添加數據庫引用”對話框中選擇到 AdventureWorks 示例數據庫的一個現有連接。有關更多信息,請參見 “添加數據庫引用”對話框。
創建 SQL Server 存儲過程
創建了 SQL Server 項目后,向其中添加一個存儲過程。
創建 SQL Server 存儲過程
從“項目”菜單中選擇“添加新項”。
在 “添加新項”對話框 中選擇“存儲過程”。
鍵入 InsertCurrency 作為新存儲過程的“名稱”。
單擊“添加”。
使用以下代碼替換代碼編輯器中的代碼:
注意
C++ 示例在編譯時必須使用 /clr:safe 編譯器選項。
Visual Basic 復制代碼
Imports System
Imports System.Data
Imports System.Data.SqlClient
Imports System.Data.SqlTypes
Imports Microsoft.SqlServer.Server
Partial Public Class StoredProcedures
<SqlProcedure()> _
Public Shared Sub InsertCurrency( _
ByVal currencyCode As SqlString, ByVal name As SqlString)
Using conn As New SqlConnection("context connection=true")
Dim InsertCurrencyCommand As New SqlCommand()
Dim currencyCodeParam As New SqlParameter("@CurrencyCode", SqlDbType.NVarChar)
Dim nameParam As New SqlParameter("@Name", SqlDbType.NVarChar)
currencyCodeParam.Value = currencyCode
nameParam.Value = name
InsertCurrencyCommand.CommandText = _
"INSERT Sales.Currency (CurrencyCode, Name, ModifiedDate)" & _
" VALUES(@CurrencyCode, @Name)"
InsertCurrencyCommand.Connection = conn
conn.Open()
InsertCurrencyCommand.ExecuteNonQuery()
conn.Close()
End Using
End Sub
End Class
C# 復制代碼
using System;
using System.Data;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;
public partial class StoredProcedures
{
[SqlProcedure()]
public static void InsertCurrency_CS(
SqlString currencyCode, SqlString name)
{
using (SqlConnection conn = new SqlConnection("context connection=true"))
{
SqlCommand InsertCurrencyCommand = new SqlCommand();
SqlParameter currencyCodeParam = new SqlParameter("@CurrencyCode", SqlDbType.NVarChar);
SqlParameter nameParam = new SqlParameter("@Name", SqlDbType.NVarChar);
InsertCurrencyCommand.CommandText =
"INSERT Sales.Currency (CurrencyCode, Name, ModifiedDate)" +
" VALUES(@CurrencyCode, @Name)";
InsertCurrencyCommand.Connection = conn;
conn.Open();
InsertCurrencyCommand.ExecuteNonQuery();
conn.Close();
}
}
}
C++ 復制代碼
#include "stdafx.h"
#using <System.dll>
#using <System.Data.dll>
#using <System.xml.dll>
using namespace System;
using namespace System::Data;
using namespace System::Data::Sql;
using namespace System::Data::SqlClient;
using namespace System::Data::SqlTypes;
using namespace Microsoft::SqlServer::Server;
// In order to debug your Stored Procedure, add the following to your debug.sql file:
//
// EXEC InsertCurrency_CPP 'AAA', 'Currency Test'
// SELECT * FROM Sales.Currency WHERE CurrencyCode = 'AAA'
public ref class StoredProcedures
{
public:
[SqlProcedure]
static void InsertCurrency_CPP(SqlString currencyCode, SqlString name)
{
SqlConnection ^conn = gcnew SqlConnection("context connection=true");
SqlCommand ^insertCurrencyCommand = gcnew SqlCommand();
SqlParameter ^currencyCodeParam =
gcnew SqlParameter("@CurrencyCode", SqlDbType::NVarChar);
SqlParameter ^nameParam =
gcnew SqlParameter("@Name", SqlDbType::NVarChar);
insertCurrencyCommand->CommandText =
"insert Sales.Currency(CurrencyCode, Name, ModifiedDate)" +
" values(@CurrencyCode, @Name)";
insertCurrencyCommand->Connection = conn;
conn->Open();
insertCurrencyCommand->ExecuteNonQuery();
conn->Close();
}
};
部署、執行和調試存儲過程
創建新的存儲過程后,可以通過按 F5 生成該存儲過程,將其部署到 SQL Server 并進行調試。首先,在位于項目的“TestScripts”文件夾中的“Test.sql”文件中,添加執行和測試存儲過程的代碼。在 Visual C++ 中,此文件名為“debug.sql”。有關創建測試腳本的更多信息,請參見 如何:編輯 Test.sql 腳本以運行 SQL 對象。
有關調試 SQL 的更多信息,請參見 調試 SQL 數據庫對象。
部署并運行 InsertCurrency 存儲過程
對于 Visual Basic 和 Visual C#,在“解決方案資源管理器”中,展開“TestScripts”文件夾,再雙擊“Test.sql”文件。
對于 Visual C++,在“解決方案資源管理器”中,雙擊“debug.sql”文件。
使用以下代碼替換“Test.sql”(在 Visual C++ 中為“debug.sql”)文件中的代碼:
復制代碼
EXEC InsertCurrency 'AAA', 'Currency Test'
SELECT * from Sales.Currency where CurrencyCode = 'AAA'按 F5 生成、部署并調試該存儲過程。有關不進行調試直接部署的信息,請參見 如何:將 SQL Server 項目項部署到 SQL Server 中。
在“輸出窗口”中查看結果,然后選擇“從此處顯示輸出: 數據庫輸出”。
新聞熱點
疑難解答