信息发布软件,b2b软件,广告发布软件
标题:
VB.net中怎么访问存储过程和实例教程
[打印本页]
作者:
信息发布软件
时间:
2017-2-26 17:27
标题:
VB.net中怎么访问存储过程和实例教程
VB.net中怎么访问存储过程和实例教程
使用SQL存储过程有什么好处
■SQL存储过程执行起来比SQL命令文本快得多。当一个SQL语句包含在存储过程中时,服务器不必每次执行它时都要分析和编译它。
■调用存储过程,可以认为是一个三层结构。这使你的程序易于维护。如果程序需要做某些改动,你只要改动存储过程即可
■你可以在存储过程中利用Transact-SQL的强大功能。一个SQL存储过程可以包含多个SQL语句。你可以使用变量和条件。这意味着你可以用存储过程建立非常复杂的查询,以非常复杂的方式更新数据库。
■最后,这也许是最重要的,在存储过程中可以使用参数。你可以传送和返回参数。你还可以得到一个返回值(从SQL RETURN语句)。
环境:WinXP+VB6+sp6+SqlServer2000
数据库:test
表:Users
CREATE TABLE [dbo].[users] (
[id] [int] IDENTITY (1, 1) NOT NULL ,
[truename] [char] (10) COLLATE Chinese_PRC_CI_AS NULL ,
[regname] [char] (10) COLLATE Chinese_PRC_CI_AS NULL ,
[pwd] [char] (10) COLLATE Chinese_PRC_CI_AS NULL ,
[sex] [char] (10) COLLATE Chinese_PRC_CI_AS NULL ,
[email] [text] COLLATE Chinese_PRC_CI_AS NULL ,
[jifen] [decimal](18, 2) NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
ALTER TABLE [dbo].[users] WITH NOCHECK ADD
CONSTRAINT [PK_users] PRIMARY KEY CLUSTERED
(
[id] ) ON [PRIMARY]
GO
存储过程select_users
CREATE PROCEDURE select_users @regname char(20), @numrows int OUTPUT
AS
Select * from users
SELECT @numrows = @@ROWCOUNT
if @numrows = 0
return 0
else return 1
GO
存储过程insert_users
CREATE PROCEDURE insert_users @truename char(20), @regname char(20),@pwd char(20),@sex char(20),@email char(20),@jifen decimal(19,2)
AS
insert into users(truename,regname,pwd,sex,email,jifen) values(@truename,@regname,@pwd,@sex,@email,@jifen)
GO
在VB环境中,添加DataGrid控件,4个按钮,6个文本框
代码简单易懂。
‘引用microsoft active data object 2.X library
Option Explicit
Dim mConn As ADODB.Connection
Dim rs1 As ADODB.Recordset
Dim rs2 As ADODB.Recordset
Dim rs3 As ADODB.Recordset Dim rs4 As ADODB.Recordset
Dim cmd As ADODB.Command
Dim param As ADODB.Parameter
'这里用第一种方法使用存储过程添加数据
Private Sub Command1_Click()
Set cmd = New ADODB.Command
Set rs1 = New ADODB.Recordset
cmd.ActiveConnection = mConn
cmd.CommandText = "insert_users"
cmd.CommandType = adCmdStoredProc
Set param = cmd.CreateParameter("truename", adChar, adParamInput, 20, Trim(txttruename.Text))
cmd.Parameters.Append param
Set param = cmd.CreateParameter("regname", adChar, adParamInput, 20, Trim(txtregname.Text))
cmd.Parameters.Append param
Set param = cmd.CreateParameter("pwd", adChar, adParamInput, 20, Trim(txtpwd.Text))
cmd.Parameters.Append param
Set param = cmd.CreateParameter("sex", adChar, adParamInput, 20, Trim(txtsex.Text))
cmd.Parameters.Append param
Set param = cmd.CreateParameter("email", adChar, adParamInput, 20, Trim(txtemail.Text))
cmd.Parameters.Append param
‘下面的类型需要注意,如果不使用adSingle,会发生一个精度无效的错误
Set param = cmd.CreateParameter("jifen", adSingle, adParamInput, 50, Val(txtjifen.Text))
cmd.Parameters.Append param
Set rs1 = cmd.Execute
Set cmd = Nothing
Set rs1 = Nothing
End Sub
这里用第二种方法使用存储过程添加数据
Private Sub Command2_Click()
Set rs2 = New ADODB.Recordset
Set cmd = New ADODB.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)
Set rs2 = cmd.Execute
Set cmd = Nothing
Set rs1 = Nothing
End Sub
'这里用第三种方法使用连接对象来插入数据
Private Sub Command4_Click()
Dim strsql As String
strsql = "insert_users '" amp; Trim(txttruename.Text) amp; "','" amp; Trim(txtregname.Text) amp; "','" amp; Trim(txtpwd.Text) amp; "','" amp; Trim(txtsex.Text) amp; "','" amp; Trim(txtemail.Text) amp; "','" amp; Val(txtjifen.Text) amp; "'"
Set rs3 = New ADODB.Recordset Set rs3 = mConn.Execute(strsql)
Set rs3 = Nothing
End Sub
'利用存储过程显示数据
‘要处理多种参数,输入参数,输出参数以及一个直接返回值
Private Sub Command3_Click()
Set rs4 = New ADODB.Recordset
Set cmd = New ADODB.Command
cmd.ActiveConnection = mConn
cmd.CommandText = "select_users"
cmd.CommandType = adCmdStoredProc
'返回值
Set param = cmd.CreateParameter("RetVal", adInteger, adParamReturnValue, 4)
cmd.Parameters.Append param
'输入参数
Set param = cmd.CreateParameter("regname", adChar, adParamInput, 20, Trim(txtregname.Text))
cmd.Parameters.Append param
'输出参数
Set param = cmd.CreateParameter("numrows", adInteger, adParamOutput)
cmd.Parameters.Append param
Set rs4 = cmd.Execute()
If cmd.Parameters("RetVal")。Value = 1 Then
MsgBox cmd.Parameters("numrows")。Value
Else
MsgBox "没有记录"
End If
MsgBox rs4.RecordCount
Set DataGrid1.DataSource = rs4
DataGrid1.Refresh
End Sub
'连接数据库
Private Sub Form_Load()
Set mConn = New Connection
mConn.ConnectionString = "Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=Test;Data Source=yang"
mConn.CursorLocation = adUseClient '设置为客户端
mConn.Open
End Sub
'关闭数据连接
Private Sub Form_Unload(Cancel As Integer)
mConn.Close
Set mConn = Nothing
End Sub
复制代码
作者:
信息发布软件
时间:
2017-2-26 17:29
此页涉及到的存储过程的创建,在存储过程的创建中有源码
1、调用无参数存储过程
dim conn As New SqlConnection
dim FBasicDataRecord as new BasicDataRecord()
conn.ConnectionString = "Data Source=(local);Initial Catalog=LineManager;User ID=sa;Password=1"
conn.Open()
Dim cmd As SqlCommand
cmd = New SqlCommand("GetNewestData", conn) -------要调用存储过程名称
cmd.CommandType = CommandType.StoredProcedure -----------关键,要想调用存储过程,需将
commandtype类型设置为storedprocedure
Dim myReader As SqlDataReader
Try
myReader = cmd.ExecuteReader() -------------执行存储过程
If myReader.Read() Then
FBasicDataRecord.mySetDateTime = myReader.GetDateTime(0)
FBasicDataRecord.myHalfHourCost = myReader.GetDecimal(1)
FBasicDataRecord.myUnitTime = myReader.GetInt32(2)
FBasicDataRecord.myPrepareTime = myReader.GetInt32(3)
FBasicDataRecord.myLeastCurrency = myReader.GetDecimal(4)
FBasicDataRecord.myUserName = myReader.GetString(5)
Return True
Else
Return False
End If
Catch ex As Exception
Return ex.Message
Finally
conn.close()
End Try
2、调用有参数存储过程
Dim cmd As SqlCommand
dim conn As New SqlConnection
conn.ConnectionString = "Data Source=(local);Initial Catalog=LineManager;User ID=sa;Password=1"
conn.Open()
cmd = New SqlCommand("ProcCharge", conn) --------存储过程名称
cmd.CommandType = CommandType.StoredProcedure ----------改变类型
Dim a As New SqlParameter("@CardNo", SqlDbType.VarChar) ------------将存储过程中涉及的参数加入进来,并附
值。就像给函数的各个参数赋值一样
a.Value = myCharge.myCardNo
cmd.Parameters.Add(a)
Dim b As New SqlParameter("@ChargeDateTime", SqlDbType.DateTime)
b.Value = myCharge.myChargeDateTime
cmd.Parameters.Add(b)
Dim c As New SqlParameter("@Charge", SqlDbType.Int)
c.Value = myCharge.myCharge
cmd.Parameters.Add(c)
Dim d As New SqlParameter("@UserName", SqlDbType.VarChar)
d.Value = myCharge.myUserName
cmd.Parameters.Add(d)
Dim e As New SqlParameter("@LastBalance", SqlDbType.Float)
e.Value = myCharge.myLeastBalance
cmd.Parameters.Add(e)
Dim f As New SqlParameter("@CurrentBalance", SqlDbType.Decimal)
f.Value = myCharge.myCurrentBalance
cmd.Parameters.Add(f) ----------------参数块
Try
Return cmd.ExecuteNonQuery() > 0 ------------------执行存储过程。当存储过程涉及到的是插入删除或
更新操作时,用executenonquery(),而如果是查询,则用executereader()
Catch ex As Exception
MsgBox(ex.Message)
Return False
Finally
conn.Close()
End Try
3、调用有返回值的存储过程
dim conn As New SqlConnection
conn.ConnectionString = "Data Source=(local);Initial Catalog=LineManager;User ID=sa;Password=1"
conn.Open()
Dim cmd As SqlCommand
cmd = New SqlCommand("procBalanceUserName", myConn.myConn) ---------存储过程名称
cmd.CommandType = CommandType.StoredProcedure ----------改变类型
cmd.Parameters.Add(New SqlParameter("@CardNo", SqlDbType.VarChar)) -------添加参数,此为输入参数
cmd.Parameters("@CardNo").Value = CardNo
cmd.Parameters.Add(New SqlParameter("@MachineNo", SqlDbType.VarChar))
cmd.Parameters("@MachineNo").Value = MachineNo
cmd.Parameters.Add(New SqlParameter("@Balance", SqlDbType.Float, 20)) ---------定义输出参数
cmd.Parameters("@Balance").Direction = ParameterDirection.Output -------输出参数用此标识
'输出参数必须有指定长度,否则不会成功。
cmd.Parameters.Add(New SqlParameter("@UserName", SqlDbType.VarChar, 10)) -------输出参数必须是名字,类
型,长度。不可省略。否则,会出错误。
cmd.Parameters("@UserName").Direction = ParameterDirection.Output
Try
cmd.ExecuteReader() ---------------执行存储过程
myBalance = cmd.Parameters("@Balance").Value.ToString() ----------将存储过程的返回值赋给定义的变量
myUserName = cmd.Parameters("@UserName").Value.ToString()
Catch ex As Exception
MsgBox(ex.Message)
Finally
Conn.Close()
End Try
总结一下,调用存储过程,首先,实例化sqlcommand,然后修改commandtype类型,如果参数,则给参数赋值或定义输出参数。然后执行。
复制代码
实例教程2
作者:
信息发布软件
时间:
2017-2-26 17:30
实例教程3
首先,在SqlServer中创建存储过程,在调用时分为有参数和没有参数两种情况,
先就简单的没有参数的情况简要的介绍:
假设存储过程如下: CREATE PROC SelectAll
AS
SELECT * FROM StudentInf
则此sp的调用如下:
SqlCommand selectCMD = new SqlCommand(“SelectAll”, conn);
//conn 为SqlConnection
selectCMD.CommandType = CommandType.StoredProcedure;
如果需要将结果集加到某个DataAdapter上,则可如下:
SqlDataAdapter stuDA = new SqlDataAdapter();
stuDa.SelectCommand = selectCMD;
如果有参数:create proc andSelect
@StudentId varchar(10),
@StudentName varchar(10),
As
Select * from StudentInf where StudentId = @StudentId and StudentName = @StudentName
则参数可以如下添加:
selectCMD.Parameters.Add(“@StudentId”, SqlDbType.NVarChar, 10);
selectCMD.Parameters.Add(“@StudentName”, SqlDbType.NvarChar, 10);
如果只有一个参数,也可以这样赋值:
SqlParameters onePara = selectCMD.Parameters.Add(“@StudentId”, SqlDbType.NVarChar, 10);
onePara.Value = “ a string ”
复制代码
作者:
huangge
时间:
2017-2-27 00:49
精湛!没到一分钟就把我这问题解决了!我自己研究了大半天都没弄懂!不错!
作者:
beiao
时间:
2017-2-28 17:51
,服务热情,完美解决了问题,非常感谢~
作者:
小痞子
时间:
2017-3-1 10:40
,很有耐心讲解
作者:
lnzhanghao
时间:
2017-3-1 10:43
谢卖家,以后朋友需要会介绍来亲店里的!赞!
作者:
meng00123
时间:
2017-3-2 20:31
了,和卖家描述的一样,操作简单,很实用很方便,店家的服务热情、周到、细心很满意的一次网购
作者:
feiyang2006
时间:
2017-3-3 03:16
错满意吧下次需要还会来
作者:
万能群发
时间:
2017-3-3 03:39
位,修改的速度很快。
作者:
yerface
时间:
2017-3-3 06:24
家服务质量真心没说的,即使我是小白,卖家也做到了绝对的认真不糊弄!
作者:
meilifc001
时间:
2017-3-3 14:09
好,功能也很强大,平台已经弄完,不过最近事太忙,还没事时间完善内容,整理好后补发图片.
作者:
a001hao
时间:
2017-3-3 20:12
质量不错与店家的描述一样好评
作者:
xiaozhu168
时间:
2017-3-5 21:37
信誉,约定的都做到了,好评
作者:
紫逸风
时间:
2017-3-9 04:40
和5号笨蛋服务不错,好评!!
作者:
紫逸风
时间:
2017-3-9 15:17
好想请您吃一餐饭哦。
作者:
kevin3898
时间:
2017-3-13 09:44
又快专业就是不一样
作者:
脱颖而出
时间:
2017-3-13 22:26
致,帮忙开通公众号遇到了一些小问题,还不时提醒,开通后两天就建好了,高效!
作者:
lalajie
时间:
2017-3-14 02:28
.耐心。负责
作者:
xubaojin
时间:
2017-3-16 05:16
错服务也好尤其是模版老师我是必须得夸一夸了服务态度都是10颗星一开始我不太懂那个模版怎么安装把我给急的都快撞电脑了是模版老师不厌其烦一步一步指导的现在我的店铺好漂亮啊真心感谢店家和模版老师哦!
作者:
daoke
时间:
2017-3-17 23:02
很好独特运行速度也很快卖家很专业
作者:
ebxly
时间:
2017-3-17 23:39
推荐!
作者:
jiandao1
时间:
2017-3-17 23:43
太久1个半月了,2个客服小哥人都不错,态度也很好应该给好评,只是设计网页的设计感太一般,应该中评。
作者:
brt02
时间:
2017-3-19 00:44
么懂就来这里,客服技术好热诚
作者:
xiaoyaoyao001
时间:
2017-3-19 13:15
根本不按我的意思来修改了一遍又一遍
作者:
huanyili998
时间:
2017-3-20 01:34
心,一直回答我。我自己一直弄不懂他很耐心。
作者:
万能群发
时间:
2017-3-22 01:10
业,好评!!!!非常值得信任!!
作者:
dccmdy
时间:
2017-3-22 11:34
好,物流快
作者:
西充
时间:
2017-3-22 11:50
相当好的卖家!
作者:
pwl2015
时间:
2017-3-22 13:07
,非常迅速!
作者:
xiaoyaoyao001
时间:
2017-3-22 14:54
按照我的意思做的,中间改了几次,最后很满意,店家费心了,下次再来
作者:
huaxue98
时间:
2017-3-23 02:50
,做的真棒,而且服务质量真是棒棒哒,没得说,好评,做的页面首页简单大气上档次,认真负责,而且美工很好,做
作者:
小痞子
时间:
2017-3-23 15:12
服务好值得信赖!
作者:
feiyang2006
时间:
2017-3-23 18:51
,值得长期合作
作者:
beiao
时间:
2017-3-23 19:55
的很好客服很有耐心非常满意
作者:
bysqb
时间:
2017-3-23 21:23
有创意了,设计出来的样式很符合我们想要的风格,画面精美,做出来的效果不错,谢谢店家的耐心服务,很满意。
作者:
我爱苏苏
时间:
2017-3-23 21:59
力,好评
作者:
c19900420
时间:
2017-3-25 07:03
小卖家,虽然店铺很难看,但是还是害怕装修会不会没有效果,客服台热情了!就做了一个,付款了后其实蛮忐忑的,结
作者:
yangjiang1
时间:
2017-3-25 16:36
和5号笨蛋好评
作者:
weipinzongmeng
时间:
2017-3-25 22:18
了,每次服务都超赞的,这次62号小笨蛋的服务很是周到,虽只是个小女孩,资质不深,但很爱岗敬业,值得表扬,大家以后有需要也多支持下62号
作者:
huaxue98
时间:
2017-3-28 08:09
度都不错
作者:
feiyang2006
时间:
2017-3-28 12:03
的很好客服很有耐心非常满意
欢迎光临 信息发布软件,b2b软件,广告发布软件 (http://postbbs.com/)
Powered by Discuz! X3.2