vb.net下如何调用存储过程,大家帮帮忙!

sufangzhong 2004-04-27 01:28:19
要还原一个数据库,假设是student.在master数据库上建一个存储过程来关闭这个student数据库的所有用户连接,存储过程代码如下,这是csdn上站友提供的,肯定没有出错。
/*
关闭用户打开的进程处理
*/
use master
go

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_killspid]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[p_killspid]
GO

create proc p_killspid
@dbname varchar(200) --要关闭进程的数据库名
as
declare @sql nvarchar(500)
declare @spid nvarchar(20)

declare #tb cursor for
select spid=cast(spid as varchar(20)) from master..sysprocesses where dbid=db_id(@dbname)
open #tb
fetch next from #tb into @spid
while @@fetch_status=0
begin
exec('kill '+@spid)
fetch next from #tb into @spid
end
close #tb
deallocate #tb
go
我在vb.net下用如下代码调用:
Dim sConnectionString As String = _
"data source=localhost;initial catalog=master;integrated security=SSPI;persist security info=False;workstation id=XIER-7Y049H16BQ;packet size=4096"
Dim sqlConn As New SqlConnection(sConnectionString)

Dim myCmd As New SqlCommand()
With myCmd
.Connection = sqlConn
.CommandText = "p_killspid"
.CommandType = CommandType.StoredProcedure
End With
Dim prmSql As SqlParameter = myCmd.Parameters.Add("@dbname", "student")
prmSql.Direction = ParameterDirection.Input
sqlConn.Open()
myCmd.ExecuteNonQuery()
Dim sSQL As String = "restore database student from disk='d:\bb.bak'" //数据库还原语句
Dim cmd As New SqlCommand(sSQL, sqlConn)

cmd.ExecuteNonQuery()

sqlConn.Close()
但是程序一直出错,一直不能还原。大家帮帮忙,到底该怎么修改啊,这是我第一次用这个,所以都不知道怎么办,希望大家热心指导,不胜感激!
...全文
141 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
srz007 2004-04-27
  • 打赏
  • 举报
回复
http://support.microsoft.com/default.aspx?scid=kb;en-us;306574
521kevin 2004-04-27
  • 打赏
  • 举报
回复

mycmd.CommandType = CommandType.StoredProcedure
mycmd.CommandText = "名称"
mycmd.Parameters.Add("@storename", storehouse)
mycmd.Parameters.Add("@companyname", company)
mycmd.Parameters.Add("@mintime", mindate)
mycmd.Parameters.Add("@maxtime", maxdate)
sqlda = New SqlDataAdapter(mycmd)
sqlds = New DataSet
sqlda.Fill(sqlds, "表名")
sufangzhong 2004-04-27
  • 打赏
  • 举报
回复
大哥能不能再说详细一点啊。如果可以在程序中直接杀死进程在还原也是好办法,不过我不会。另外其实上面的存储过程就是用来杀死连接进程的,不是还原数据库的。所以我才要调用存储进程,断开连接,然后再写恢复数据库的sql语句去还原的。所以想请教你:
1.如果用你介绍的办法,杀死连接进程的语句直接在程序中实现,不另外设置存储过程,具体怎么弄?我有看到vb写的不过是用ADODB连接的,我不会用那个。如果用system.data.sqlclient,怎么去实现kill spid 要还原的数据库的连接进程?
2.如果还是用上面的存储过程,怎么修改?

唉,每次遇到问题的时候才会发现自己怎么这么无知,郁闷死了。
Seeko0 2004-04-27
  • 打赏
  • 举报
回复
select spid from sysprocesses A left join sysdatabases B on A.dbid=B.dbid where [name]='yourDataBase'

调用 kill spid 清除掉你需要还原的数据库的连接进程
然后连接数据库master,让它执行你的存储过程。

16,552

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧