VB 2010 (54)Command对象使用存储过程

       使用存储过程的原因:创建—个过程并把它存储在数据库中,因为事先知道有这个过程,所以可以提前编译它,以便在应用程序中使用。
    在代码中使用存储过程的另一个好处是一般比较安全。使用没有存储过程的SQL时,总是需要通过连接字符串来建立SQL语句。这样就比较危险——如果一些字符串是用户生成的,就更危险,因为所得的SQL可能无效或是恶意的。

1.创建存储过程    

存储过程可以是一个SQL语句,也可以是一组复杂的语句。T-SQL支持分支、循环和其他类型的变量声明,这有助于编写出一些非常复杂的存储过程代码。下面是一个存储过程的代码:

ALTER PROCEDURE usp_authors_Get_By_ID
    @au_id varchar(11)
AS
Select
    au_id,au_lname,au_fname,phone,address,city,state,zip,contract
From
    authors
Where
    au_id=@au_id

2.调用存储过程

      为了调用存储过程,只需创建一个连接到数据库的SqIConnection对象,再创建一个SqlCommand对象运行该存储过程即可。
     现在要确定是否通过调用存储过程返回一些数据。在下面的例子中,将返回一个SqIDataReader对象的实例。创建一个GetAuthorSqIReader方法,该方法需要一个作者的ID作为参数,并返回一个SqIDataReader的实例作为结果。

        在SqICommand的构造函数调用中使用了一个独立的辅助方法,该方法创建了对pubs数据库的连接方法:GetPubsConnection。用My.Settings空间会简化代码。

Imports System.Data.SqlClient
Module Module1

    Sub Main()
        testStoreProcedure()

        Console.Read()
    End Sub
    Private Function GetAuthorSqlReader(ByVal authorId As String) As SqlDataReader
        Dim comm As SqlCommand = New SqlCommand("usp_authors_Get_By_ID", GetPubsConnection())
        comm.CommandType = CommandType.StoredProcedure
        comm.Parameters.Add(New SqlParameter("@au_id", authorId))
        comm.Connection.Open()
        Return comm.ExecuteReader(CommandBehavior.CloseConnection)
    End Function
    Private Function GetPubsConnection() As SqlConnection
        '这里可是绝技,试错N次才找成功
        Return New SqlConnection(My.Settings.pubsConnectionString)
    End Function
   

Private Sub testStoreProcedure()
        Dim reader As SqlDataReader = GetAuthorSqlReader("409-56-7008")
        If reader.Read Then
            Console.WriteLine(reader("au_fname").ToString & " " & reader("au_lname").ToString)
        End If
    End Sub
End Module

调用存储过程的具体方法如下所示:

  • 创建一个SqICommand对象。
  • 设置CommandType属性,把它配置为访问存储过程。
  • 添加存储过程本身定义的参数。
  • 使用SqICommand对象的一个ExecuteX方法执行存储过程。
     
发布了146 篇原创文章 · 获赞 0 · 访问量 2724

猜你喜欢

转载自blog.csdn.net/ngbshzhn/article/details/105621067
VB