使用sql好处.docx
《使用sql好处.docx》由会员分享,可在线阅读,更多相关《使用sql好处.docx(9页珍藏版)》请在冰豆网上搜索。
使用sql好处
∙使用SQL存储过程有什么好处
■SQL存储过程执行起来比SQL命令文本快得多。
当一个SQL语句包含在存储过程中时,服务器不必每次执行它时都要分析和编译它。
■调用存储过程,可以认为是一个三层结构。
这使你的程序易于维护。
如果程序需要做某些改动,你只要改动存储过程即可
■你可以在存储过程中利用Transact-SQL的强大功能。
一个SQL存储过程可以包含多个SQL语句。
你可以使用变量和条件。
这意味着你可以用存储过程建立非常复杂的查询,以非常复杂的方式更新数据库。
■最后,这也许是最重要的,在存储过程中可以使用参数。
你可以传送和返回参数。
你还可以得到一个返回值(从SQLRETURN语句)。
环境:
WinXP+VB6+sp6+SqlServer2000
数据库:
test
表:
Users
CREATETABLE[dbo].[users](
[id][int]IDENTITY(1,1)NOTNULL,
[truename][char](10)COLLATEChinese_PRC_CI_ASNULL,
[regname][char](10)COLLATEChinese_PRC_CI_ASNULL,
[pwd][char](10)COLLATEChinese_PRC_CI_ASNULL,
[sex][char](10)COLLATEChinese_PRC_CI_ASNULL,
[email][text]COLLATEChinese_PRC_CI_ASNULL,
[jifen][decimal](18,2)NULL
)ON[PRIMARY]TEXTIMAGE_ON[PRIMARY]
GO
ALTERTABLE[dbo].[users]WITHNOCHECKADD
CONSTRAINT[PK_users]PRIMARYKEYCLUSTERED
(
[id]
)ON[PRIMARY]
GO
存储过程select_users
CREATEPROCEDUREselect_users@regnamechar(20),@numrowsintOUTPUT
AS
Select*fromusers
SELECT@numrows=@@ROWCOUNT
if@numrows=0
return0
elsereturn1
GO
存储过程insert_users
CREATEPROCEDUREinsert_users@truenamechar(20),@regnamechar(20),@pwdchar(20),@sexchar(20),@emailchar(20),@jifendecimal(19,2)
AS
insertintousers(truename,regname,pwd,sex,email,jifen)values(@truename,@regname,@pwd,@sex,@email,@jifen)
GO
在VB环境中,添加DataGrid控件,4个按钮,6个文本框
代码简单易懂。
‘引用microsoftactivedataobject2.Xlibrary
OptionExplicit
DimmConnAsADODB.Connection
∙Dimrs1AsADODB.Recordset
Dimrs2AsADODB.Recordset
Dimrs3AsADODB.Recordset
Dimrs4AsADODB.Recordset
DimcmdAsADODB.Command
DimparamAsADODB.Parameter
'这里用第一种方法使用存储过程添加数据
PrivateSubCommand1_Click()
Setcmd=NewADODB.Command
Setrs1=NewADODB.Recordset
cmd.ActiveConnection=mConn
cmd.CommandText="insert_users"
cmd.CommandType=adCmdStoredProc
Setparam=cmd.CreateParameter("truename",adChar,adParamInput,20,Trim(txttruename.Text))
cmd.Parameters.Appendparam
Setparam=cmd.CreateParameter("regname",adChar,adParamInput,20,Trim(txtregname.Text))
cmd.Parameters.Appendparam
Setparam=cmd.CreateParameter("pwd",adChar,adParamInput,20,Trim(txtpwd.Text))
cmd.Parameters.Appendparam
Setparam=cmd.CreateParameter("sex",adChar,adParamInput,20,Trim(txtsex.Text))
cmd.Parameters.Appendparam
Setparam=cmd.CreateParameter("email",adChar,adParamInput,20,Trim(txtemail.Text))
cmd.Parameters.Appendparam
‘下面的类型需要注意,如果不使用adSingle,会发生一个精度无效的错误
Setparam=cmd.CreateParameter("jifen",adSingle,adParamInput,50,Val(txtjifen.Text))
cmd.Parameters.Appendparam
Setrs1=cmd.Execute
Setcmd=Nothing
Setrs1=Nothing
EndSub
'这里用第二种方法使用存储过程添加数据
PrivateSubCommand2_Click()
Setrs2=NewADODB.Recordset
Setcmd=NewADODB.Command
cmd.ActiveConnection=mConn
cmd.CommandText="insert_users"
cmd.CommandType=adCmdStoredProc
cmd.Parameters("@truename")=Trim(txttruename.Text)
cmd.Parameters("@regname")=Trim(txtregname.Text)
cmd.Parameters("@pwd")=Trim(txtpwd.Text)
cmd.Parameters("@sex")=Trim(txtsex.Text)
cmd.Parameters("@email")=Trim(txtemail.Text)
∙cmd.Parameters("@jifen")=Val(txtjifen.Text)
Setrs2=cmd.Execute
Setcmd=Nothing
Setrs1=Nothing
EndSub
'这里用第三种方法使用连接对象来插入数据
PrivateSubCommand4_Click()
DimstrsqlAsString
strsql="insert_users'"&Trim(txttruename.Text)&"','"&Trim(txtregname.Text)&"','"&Trim(txtpwd.Text)&"','"&Trim(txtsex.Text)&"','"&Trim(txtemail.Text)&"','"&Val(txtjifen.Text)&"'"
Setrs3=NewADODB.Recordset
Setrs3=mConn.Execute(strsql)
Setrs3=Nothing
EndSub
'利用存储过程显示数据
‘要处理多种参数,输入参数,输出参数以及一个直接返回值
PrivateSubCommand3_Click()
Setrs4=NewADODB.Recordset
Setcmd=NewADODB.Command
cmd.ActiveConnection=mConn
cmd.CommandText="select_users"
cmd.CommandType=adCmdStoredProc
'返回值
Setparam=cmd.CreateParameter("RetVal",adInteger,adParamReturnValue,4)
cmd.Parameters.Appendparam
'输入参数
Setparam=cmd.CreateParameter("regname",adChar,adParamInput,20,Trim(txtregname.Text))
cmd.Parameters.Appendparam
'输出参数
Setparam=cmd.CreateParameter("numrows",adInteger,adParamOutput)
cmd.Parameters.Appendparam
Setrs4=cmd.Execute()
Ifcmd.Parameters("RetVal").Value=1Then
MsgBoxcmd.Parameters("numrows").Value
Else
MsgBox"没有记录"
EndIf
MsgBoxrs4.RecordCount
SetDataGrid1.DataSource=rs4
DataGrid1.Refresh
EndSub
'连接数据库
PrivateSubForm_Load()
SetmConn=NewConnection
mConn.ConnectionString=Provider=MSDASQL.1;PersistSecurityInfo=False;UserID=sa;DataSource=yang"
mConn.CursorLocation=adUseClient'设置为客户端
mConn.Open
EndSub
'关闭数据连接
∙PrivateSubForm_Unload(CancelAsInteger)
mConn.Close
SetmConn=Nothing
EndSub
vb调用存储过程的方法
0
推荐
假设有一个名为doc_ProcName存储过程,该存储过程有一个输入参数,一个输出参数。
1)直接传递参数调用存储过程
直接传递参数方法主要通过以下几个步骤来实现:
(1)通过ADODB的Connection对象打开与数据源的连接;
(2)通过ActiveConnection指定Command对象当前所属的Connection对象;
(3)通过CommandText属性设置Command对象的源,即要调用的存储过程;
(4)通过CommandType属性确定Command对象的源类型,如果源类型为存储过程CommandType即为adCmdStoredProc;
(5)通过Command对象的Parameters集合向所调用的存储过程传递参数,其中对象Parameters(0)为执行存储过程的返回值,返回值为0则执行存储过程成功;
(6)通过Eexecute方法执行在CommandText属性中指定的存储过程。
以存储过程doc_ProcName为例,关键代码如下:
DimstrSAsString'定义一变量
DimadoconnAsNewADODB.Connection'Connection对象代表了打开与数据源的连接。
DimadocommAsNewADODB.Command'Command对象定义了将对数据源执行的指定命令。
DimReturnValueAsInteger'调用存储过程的返回值
adoconn.ConnectionString=Adodc1.ConnectionString'Adodc1为窗体中的ADO控件,并已成功连接数据库
adoconn.Open
Setadocomm.ActiveConnection=adoconn'指示指定的Command对象当前所属的Connection对象。
adocomm.CommandText="doc_ProcName"'设置Command对象源。
adocomm.CommandType=adCmdStoredProc'通知提供者CommandText属性有什么,它可能包括Command对象的源类型。
设置这个属性优化了该命令的执行。
adocomm.Parameters
(1)="1"
adocomm.Parameters
(2)="OutputParameters"'OutputParameters可以为任意的字符串或数字
adocomm.Execute
ReturnValue=adocomm.Parameters(0)'存储过程的返回值,返回0则成功执行。
strS=adocomm.Parameters
(2)'把存储过程的输出参数的值赋给变量strS
2)追加参数法调用存储过程
追加参数通过CreateParameter方法,用来指定属性创建新的Parameter对象。
具体语法如下:
Setparameter=command.CreateParameter(Name,Type,Direction,Size,Value)
·Name可选,字符串,代表Parameter对象名称。
·Type可选,长整型值,指定Parameter对象数据类型。
·Direction可选,长整型值,指定Parameter对象类型。
·Size可选,长整型值,指定参数值最大长度(以字符或字节数为单位)。
·Value可选,变体型,指定Parameter对象值。
这种方法与上面一种方法的分别主要在于,追加参数的方法在向存储过程传递参数时,这种方法首先通过CreateParameter方法为存储过程创建参数,然后通过Append方法将创建的参数追加到Parameters集合中去。
仍然以存储过程doc_ProcName的调用为例,关键代码如下:
DimmRstAsADODB.Recordset'Recordset对象表示的是来自基本表或命令执行结果的记录全集。
DimprmAsADODB.Parameter'Parameter对象代表参数或与基于参数化查询或存储过程的Command对象相关联的参数。
adoconn.ConnectionString=Adodc1.ConnectionString
adoconn.Open
Setadocomm.ActiveConnection=adoconn
adocomm.CommandText="doc_ProcName"
adocomm.CommandType=adCmdStoredProc
Setprm=adocomm.CreateParameter("parameter1",adTinyInt,adParamInput,,"1")
adocomm.Parameters.Appendprm
Setprm=adocomm.CreateParameter("parameter2",adInteger,adParamOutput)
adocomm.Parameters.Appendprm
SetmRst=adocomm.Execute
ReturnValue=adocomm.Parameters(0)
以上代码中未定义的变量以及未注释的语句与前述相同。
结束语
在应用程序中调用服务器端存储过程,不仅能显著提高整个应用的性能,而且能加强对数据库数据的保护。
VB为客户端应用程序调用存储过程提供了一组方便而有效的方法。
在VB中执行SQLSERVER存储过程
作者:
李世存 入库时间:
29/06/200509:
52 点击次数:
341
存储过程是SQLSERVER的高级应用,应用存储过程可以处理在代码中烦锁的事件,且和代码完全分开,实现模块化。
程序员只要为存储过程输入必要的参数,而后所有的这一切就交给SQLSERVER执行。
SQLSERVER处理完毕后可传给程序员所需要的处理结果。
下面是VB应用存储过程的一个例子。
(传载请附注本站) 代码如下:
‘ 定义部份,输入参数和输出参数
Dim RsCmd As New ADODB.Command
With RsCmd
.Parameters.Append .CreateParameter("@empl_no", adVarChar, adParamInput, 10)
.Parameters.Append .CreateParameter("@inadd", adChar, adParamInput, 1)
.Parameters.Append .CreateParameter("@surname", adVarChar, adParamInput, 20)
.Parameters.Append .CreateParameter("@succ_mark", adChar, adParamOutput, 1)
.CommandText = "inp_infor" ‘ 存储过程名
.CommandType = adCmdStoredProc ‘类型为存储过程
.ActiveConnection = cn1 ‘连接, connection
End with
‘ 为输入参数赋值并执行存储过程
RsCmd.Parameters("@empl_no").value = Trim(hkEmpl_no.Text)
RsCmd.Parameters("@inadd").value = insertupdate
RsCmd.Parameters("@surname").value = Trim(surname.Text)
RsCmd.execute
‘ 处理返回值
If RsCmd.Parameters("@succ_mark") = "S" Then
Dispose statement
End if