SqlCommandBuilder.DeriveParameters设置储存过程参数

 SqlCommandBuilder.DeriveParameters设置储存过程参数
之前我一直都用手写的方法,手动添加存储过程参数,实在的麻烦无与,这两天突然在书上看到这个方法,而且在网上查了,对性能也没有太大影响,所以就开始动手使用!网上多是使用C#的实例,但我又是vb.net的忠实fans,所以就准备把他改在vb.net,没想在这个过程还碰到了很多问题,经过无数次的调试终于搞定,写出来供大家享用,从此的我们的数据层就更加强壮了呀!

数据层: mydata.vb

Option   Strict   Off
Option   Explicit   On
Imports  system.data
Imports  system.data.sqlclient
Imports  Microsoft.VisualBasic
Imports  System.Xml
Imports  System.IO

Public   Class mydata
Private connectionstring As String
    
Dim cn As SqlConnection
    
Public Sub New()
        
MyBase.New()
    
End Sub

    
Public Sub open()
        connectionstring 
= System.Configuration.ConfigurationManager.AppSettings("connectionstring").ToString.Trim
        cn 
= New SqlConnection(connectionstring)
        
If cn.State = ConnectionState.Open Then
            cn.Close()
        
End If
        cn.Open()
    
End Sub

    
Public Sub closed()
        cn.Close()
    
End Sub


    
''' <summary>
    ''' 根据存储过程与参数值返回sqlcommand对象
    ''' </summary>
    ''' <param name="spname">存储过程名</param>
    ''' <param name="spvalue">参数数组</param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Function sqlcom(ByVal spname As StringByVal spvalue As Object()) As SqlCommand
        
Dim com As SqlCommand = New SqlCommand(spname, cn)
        com.CommandType 
= CommandType.StoredProcedure
        
Me.open()
        SqlCommandBuilder.DeriveParameters(com)    
'将存储过程参数同给com对象,通过com.Parameters返回
        Me.closed()
        
Dim spc As SqlParameter() = New SqlParameter(com.Parameters.Count - 1) {}  
                            
'返回数组,记住减1因为后面会产生一个为nothing的参数
        com.Parameters.CopyTo(spc0)  '复制数组,从0开始
        com.Parameters.Clear()         '复制完以后一定要清空,不然不能添加新参数
        For j As Integer = 0 To spc.Length - 1
            
spc(j).Value = spvalue(j).ToString   '赋值参数,记住会产生一个@return_value的多余参数为apc(0)
            com.Parameters.Add(spc(j))       
        
Next
        com.Dispose()
        
Return com
    
End Function

    
''' <summary>
    ''' 根据存储过程返回表
    ''' </summary>
    ''' <param name="spname">存储过程</param>
    ''' <param name="spvalue">值数组</param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Function getTable(ByVal spname As StringByVal spvalue As Object()) As DataTable
        
Me.open()
        
Dim com As SqlCommand = Me.sqlcom(spname, spvalue)
        
Dim sdt As SqlDataAdapter = New SqlDataAdapter(com)
        
Dim ds As DataSet = New DataSet
        sdt.Fill(ds)
        
Dim dt As DataTable = ds.Tables(0)
        
Me.closed()
        
Return dt
    
End Function

End Class


业务层:

 

Imports  Microsoft.VisualBasic
Imports  data
Imports  System.Data

Namespace per
    
Public Class per
        
Inherits data
        
Dim _spname As String
        
Public Property searchid() As String
            
Get
                
Return ViewState("searchid")
            
End Get
            
Set(ByVal value As String)
                ViewState(
"searchid"= value
            
End Set
        
End Property

        
Public Property spname() As String
            
Get
                
Return _spname
            
End Get
            
Set(ByVal value As String)
                _spname 
= value
            
End Set
        
End Property

        
Public Function get_table() As DataTable
            
Dim spvalue As Object() = New Object() {0, searchid}     '此时赋值一定要写一个整数0,后面是我们的参数
            Dim dt As DataTable = MyBase.getTable(spname, spvalue)
            
Return dt
        
End Function


    
End Class

End Namespace

表示层:

 

Imports  System
Imports  System.Data
Imports  System.Web
Imports  System.Web.UI.WebControls
Imports  Ajax
Imports  data
Imports  System.IO
Imports  per
Partial   Class perindex
    
Inherits System.Web.UI.Page
    
Dim searchid As String
    
Protected Sub Page_Load(ByVal sender As ObjectByVal e As System.EventArgs) Handles Me.Load
        
If Not IsPostBack Then
            bind_gridview()
        
End If
    
End Sub

    
Public Sub bind_gridview()
        
If searchid Is Nothing Or searchid = String.Empty Then
            searchid 
= 0
        
End If
        
Dim myper As per.per = New per.per
        myper.spname 
= "bind_per"
        myper.searchid 
= searchid
        
Dim dt As DataTable = myper.get_table()
        pergridview.DataSource 
= dt.DefaultView
        pergridview.DataBind()
    
End Sub

End Class

 这里面我主要是产生一个sqlcommand对象供大家调用,扩展大家可以自己随意了!水平有限,就写到这里!!
 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值