1
using
System;
2
using
System.Data.SqlClient;
3
using
System.Data;
4
using
System.IO;
5
6
namespace
NET.Common
7
{
8
///
<summary>
9
///
數據庫操作幫助類
10
///
</summary>
11
public
class
DatabaseHelper
12
{
13
private
const
string
SQL_DATABASE_BACK =
"
BACKUP DATABASE {0} TO DISK = '{1}'
"
;
//
數據庫備份語句
14
private
const
string
SQL_DATABASE_RESTORE =
"
RESTORE DATABASE {0} FROM DISK = '{1}' WITH REPLACE
"
;
//
數據庫還原語句
15
private
const
string
SQL_SELECT_ALL_CONN =
"
SELECT spid FROM master..sysprocesses WHERE dbid=db_id('{0}')
"
;
//
獲取指定數據庫所有鏈接語句
16
17
///
<summary>
18
///
實例數據庫操作
19
///
</summary>
20
///
<param name="masterConnectionString">
master數據庫鏈接字符串
</param>
21
public
DatabaseHelper(
string
masterConnectionString)
22
{
23
this
.MasterConnectionString =
masterConnectionString;
24
}
25
26
///
<summary>
27
///
master數據庫鏈接字符串
28
///
</summary>
29
private
string
MasterConnectionString {
get
;
set
; }
30
31
///
<summary>
32
///
SQLServer數據庫備份
33
///
</summary>
34
///
<param name="connectionString">
數據庫連接字符串
</param>
35
///
<param name="backName">
備份文件名稱,不包含后綴名
</param>
36
///
<param name="path">
備份文件存放的物理路徑
</param>
37
public
bool
Back(
string
dbName,
string
backName,
string
path)
38
{
39
//
判斷存放備份文件的目錄是否存在
40
if
(!
Directory.Exists(path))
41
{
42
//
不存在,新建目錄
43
Directory.CreateDirectory(path);
44
}
45
46
try
47
{
48
using
(SqlConnection conn =
new
SqlConnection(MasterConnectionString))
49
{
50
//
設置存放備份文件的完整物理路徑
51
string
backPath = path +
"
\\
"
+ backName +
"
.bak
"
;
52
53
//
設置數據庫備份的T-SQL語句
54
string
t_sql_back =
string
.Format(SQL_DATABASE_BACK, dbName, backPath);
55
56
using
(SqlCommand cmd =
new
SqlCommand(t_sql_back, conn))
57
{
58
cmd.CommandType =
CommandType.Text;
59
conn.Open();
60
61
//
開始備份
62
cmd.ExecuteNonQuery();
63
64
return
true
;
65
}
66
}
67
}
68
catch
69
{
70
return
false
;
71
}
72
}
73
74
///
<summary>
75
///
SQLServer數據庫還原
76
///
</summary>
77
///
<param name="dbName">
要進行還原的數據庫名稱
</param>
78
///
<param name="fullPath">
備份文件的完整物理路徑
</param>
79
public
bool
Restore(
string
dbName,
string
fullPath)
80
{
81
//
判斷還原使用的文件是否存在
82
if
(!
File.Exists(fullPath))
83
{
84
return
false
;
85
}
86
87
try
88
{
89
using
(SqlConnection conn =
new
SqlConnection(MasterConnectionString))
90
{
91
//
設置數據庫還原的T-SQL語句
92
string
t_sql_restore =
string
.Format(SQL_DATABASE_RESTORE, dbName, fullPath);
93
94
//
設置查詢指定數據庫的所有連接
95
string
t_sql_select_all_conn =
string
.Format(SQL_SELECT_ALL_CONN, dbName);
96
97
string
t_sql_kill;
98
99
conn.Open();
100
101
//
獲取指定數據庫所有連接
102
SqlCommand cmd =
new
SqlCommand(t_sql_select_all_conn, conn);
103
SqlDataAdapter reSDA =
new
SqlDataAdapter(cmd);
104
DataTable dtConn =
new
DataTable();
105
reSDA.Fill(dtConn);
106
107
//
逐一刪除連接
108
for
(
int
i =
0
; i < dtConn.Rows.Count; i++
)
109
{
110
t_sql_kill =
"
kill
"
+ dtConn.Rows[i][
0
].ToString();
111
cmd =
new
SqlCommand(t_sql_kill, conn);
112
cmd.ExecuteNonQuery();
113
}
114
115
//
執行還原操作
116
cmd =
new
SqlCommand(t_sql_restore, conn);
117
cmd.ExecuteNonQuery();
118
119
//
清空當前連接池,這個很主要,如果不清空還原后第一次訪問會出現“在向服務器發送請求時發生傳輸級錯誤。 (provider: 共享內存提供程序, error: 0 - 管道的另一端上無任何進程。)”錯誤
120
SqlConnection.ClearPool(conn);
121
return
true
;
122
}
123
124
}
125
catch
126
{
127
return
false
;
128
}
129
}
130
}
131
}
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元

