في العديد من الحالات البرمجية بدلا من تنفيذ عبارة SQL مباشرة ستحتاج إلى تنفيذ ما يدعى بالوظائف المخزنة أو Stored Procedures والتي تعتبر بدورها طريقة ممتازة لتغليف منطق قواعد البيانات وتعزيز الأمان في التطبيقات متعددة الطبقات multitiered ولتنفيذ وظيفة مخزنة ستحتاج إلى Command object تقوم بضبط خاصيته CommandType إلى StoredProcedure وخاصية CommandText إلى اسم الوظيفة المخزنة وفي المثال التالي نقوم بتنفيذ وظيفة مخزنة تقرأ عدد employees في قاعدة البيانات Pubs
Public Overloads Function CountEmployees() As Integer Dim oPubConnection As New SqlConnection Dim sConnString As String Dim oSqlCommand As SqlCommand Try sConnString = "Data Source=drcsrv01;Initial Catalog=pubs;" & _ "Integrated Security=True" oPubConnection.ConnectionString = sConnString oPubConnection.Open() oSqlCommand = New SqlCommand() oSqlCommand.Connection = oPubConnection oSqlCommand.CommandText = "GetEmployeeCount" oSqlCommand.CommandType = CommandType.StoredProcedure Return oSqlCommand.ExecuteScalar Catch oEx As Exception MessageBox.Show(oEx.Message) Finally If Not oPubConnection Is Nothing Then oPubConnection.Close() End If End Try
في العادة عندما نقوم بتنفيذ وظيفة مخزنة نحتاج إلى تمرير وسائط دخل Input Parameters وقد تستعيد نتائج الخرج من خلال وسائط الخرج Output Parameters وللتعامل مع الوسائط يجب علينا تعريف مرجع لـ SqlParameter وتزويده باسم الوسيطة ونوعها وبالنسبة لبعض أنواع البيانات ستحتاج لتمرير حجم هذه البيانات أيضا وعندما تمرر وسيطة خرج، دخل، دخل-خرج عليك أيضا أن تحدد اتجاهها في المثال التالي نمرر وسيطة دخل عبارة عن حرف وتعيد عدد الـموظفين الذين تبدأ أسماء عائلاتهم بذلك الحرف والعدد يعاد بشكل وسيطة خرج
Public Overloads Function CountEmployees(ByVal LInitial As String) As Integer
Dim oPubConnection As New SqlConnection
Dim sConnString As String
Dim oSqlCommand As SqlCommand
Try
sConnString = "Data Source=drcsrv01;Initial Catalog=pubs;" & _
"Integrated Security=True"
oPubConnection.ConnectionString = sConnString
oPubConnection = New SqlConnection(sConnString)
oPubConnection.Open()
oSqlCommand = New SqlCommand()
oSqlCommand.Connection = oPubConnection
oSqlCommand.CommandText = "GetEmployeeCountbyLInitial"
oSqlCommand.CommandType = CommandType.StoredProcedure
Dim oInputParam As SqlParameter = _
oSqlCommand.Parameters.Add("@LInitial", SqlDbType.Char, 1)
oInputParam.Value = LInitial
Dim oOutPutParam As SqlParameter = _
oSqlCommand.Parameters.Add("@EmployeeCount", SqlDbType.Int)
oOutPutParam.Direction = ParameterDirection.Output
oSqlCommand.ExecuteNonQuery()
Return oOutPutParam.Value
Catch oEx As Exception
MessageBox.Show(oEx.Message)
Finally
If Not oPubConnection Is Nothing Then
oPubConnection.Close()
End If
End Try
End Function