VB中访问存储过程的几种办法
2018-06-17 17:13:59来源:未知 阅读 ()
使用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=SQLOLEDB.1;PersistSecurityInfo=False;UserID=sa;InitialCatalog=Test;DataSource=yang"
mConn.CursorLocation=adUseClient'设置为客户端
mConn.Open
EndSub
'关闭数据连接
PrivateSubForm_Unload(CancelAsInteger)
mConn.Close
SetmConn=Nothing
EndSub
->标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:ADO设定独占性的资料库
下一篇:自动开始上次关机时关闭的应用
- HierarchicalFlexGrid控件 2018-06-17
- 静态变量慢于动态变量 2018-06-17
- 数据访问控制--多客户环境下VB数据库编程之(2) 2018-06-17
- 利用VB访问Internet 2018-06-17
- 如何访问文本文件(1)----用MicrosoftJet访问桌面数据库(三) 2018-06-17
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash