''''''''''''''
        '''还原方法'''
        ''''''''''''''
        Dim conn As New SqlConnection()
        conn.ConnectionString = strPubConnection
        conn.Open()
        '''KILL DataBase Process
        Dim cmd As New SqlCommand()
        cmd.Connection = conn
        cmd.CommandText = "use master"
        cmd.CommandText = cmd.CommandText + " SELECT spid FROM sysprocesses,sysdatabases WHERE sysprocesses.dbid=sysdatabases.dbid AND sysdatabases.Name='" + "ShintHrmDb" + "'"
        Dim dr As SqlDataReader
        dr = cmd.ExecuteReader
        Dim list As New ArrayList()
        While dr.Read()
            list.Add(dr.GetInt16(0))
        End While
        dr.Close()
        Try
            Dim i As Integer
            For i = 0 To list.Count
                cmd = New SqlCommand(String.Format("KILL {0}", list), conn)
                cmd.ExecuteNonQuery()
''''''''''''''''''''我在次处无法通过,为什么??
            Next
        Catch ex As Exception
            MessageBox.Show("error0000" + ex.Message)
            Exit Sub
        End Try
        Dim cmdRT As New SqlCommand()
        cmdRT.CommandType = CommandType.Text
        cmdRT.Connection = conn
        cmdRT.CommandText = "restore database test from disk='" + Trim(TextBox5.Text) + "'"
        Try
            cmdRT.ExecuteNonQuery()
            MessageBox.Show("Restore successed.")
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        Finally
            conn.Close()
        End Try

解决方案 »

  1.   


    String.Format("KILL {0}", list)可能是这个错了或者应该是这样String.Format("KILL {0}", list[i])
      

  2.   

    给你一个存储过程:
    CREATE PROCEDURE USP_KILLUSERS @dbname varchar(50) as
    SET NOCOUNT ON
    DECLARE @strSQL varchar(255)
    PRINT 'Killing Users'
    PRINT '--------------------'
    CREATE table #tmpUsers(
    spid int,
    eid int,
    status varchar(30),
    loginname varchar(50),
    hostname varchar(50),
    blk int,
    dbname varchar(50),
    cmd varchar(30))
    INSERT INTO #tmpUsers EXEC sp_who
    DECLARE LoginCursor CURSOR
    READ_ONLY
    FOR SELECT spid,dbname FROM #tmpUsers WHERE dbname=@dbname
    DECLARE @spid varchar(10)
    DECLARE @dbname2 varchar(40)
    OPEN LoginCursor
    FETCH NEXT FROM LoginCursor INTO @spid,@dbname2
    WHILE (@@fetch_status = 0)
    BEGIN
    PRINT 'Killing '+ @spid
    SET @strSQL = 'KILL '+ @spid
    EXEC (@strSQL)
    FETCH NEXT FROM LoginCursor INTO @spid,@dbname2
    END
    CLOSE LoginCursor
    DEALLOCATE LoginCursor
    DROP TABLE #tmpUsers
    PRINT 'DONE'
    GO