您的位置:首页 > 数据库

C#实现SQLSERVER2000数据库备份还原的两种方法

2009-06-22 17:04 507 查看
使用.net备份和还原数据库

C#实现SQLSERVER2000数据库备份还原的两种方法

: 方法一(不使用SQLDMO):

///

///
备份方法

///

SqlConnection conn 
=
 
new
 SqlConnection(
"
Server=.;Database=master;User ID=sa;Password=sa;
"
);

SqlCommand cmdBK 
=
 
new
 SqlCommand();

cmdBK.CommandType 
=
 CommandType.Text;

cmdBK.Connection 
=
 conn;

cmdBK.CommandText 
=
 
@"
backup database test to disk='C:/ba' with init
"
;

try

{

conn.Open();

cmdBK.ExecuteNonQuery();

MessageBox.Show(
"
Backup successed.
"
);

}

catch
(Exception ex)

{

MessageBox.Show(ex.Message);

}

finally

{

conn.Close();

conn.Dispose();

}

///

///
还原方法

///

SqlConnection conn 
=
 
new
 SqlConnection(
"
Server=.;Database=master;User ID=sa;Password=sa;Trusted_Connection=False
"
);

conn.Open();

//
KILL DataBase Process

SqlCommand cmd 
=
 
new
 SqlCommand(
"
SELECT spid FROM sysprocesses ,sysdatabases WHERE sysprocesses.dbid=sysdatabases.dbid AND sysdatabases.Name='test'
"
, conn);

SqlDataReader dr;

dr 
=
 cmd.ExecuteReader();

ArrayList list 
=
 
new
 ArrayList();

while
(dr.Read())

{

list.Add(dr.GetInt16(
0
));

}

dr.Close();

for
(
int
 i 
=
 
0
; i 
<
 list.Count; i
++
)

{

cmd 
=
 
new
 SqlCommand(
string
.Format(
"
KILL {0}
"
, list), conn);

cmd.ExecuteNonQuery();

}

SqlCommand cmdRT 
=
 
new
 SqlCommand();

cmdRT.CommandType 
=
 CommandType.Text;

cmdRT.Connection 
=
 conn;

cmdRT.CommandText 
=
 
@"
restore database test from disk='C:/ba'
"
;

try

{

cmdRT.ExecuteNonQuery();

MessageBox.Show(
"
Restore successed.
"
);

}

catch
(Exception ex)

{

MessageBox.Show(ex.Message);

}

finally

{

conn.Close();

}

方法二(使用SQLDMO):

///

///
备份方法

///

SQLDMO.Backup backup 
=
 
new
 SQLDMO.BackupClass();

SQLDMO.SQLServer server 
=
 
new
 SQLDMO.SQLServerClass();

//
显示进度条

SQLDMO.BackupSink_PercentCompleteEventHandler progress 
=
 
new
 SQLDMO.BackupSink_PercentCompleteEventHandler(Step);

backup.PercentComplete 
+=
 progress;

try

{

server.LoginSecure 
=
 
false
;

server.Connect(
"
.
"
, 
"
sa
"
, 
"
sa
"
);

backup.Action 
=
 SQLDMO.SQLDMO_BACKUP_TYPE.SQLDMOBackup_Database;

backup.Database 
=
 
"
test
"
;

backup.Files 
=
 
@"
D:/test/myProg/backupTest
"
;

backup.BackupSetName 
=
 
"
test
"
;

backup.BackupSetDescription 
=
 
"
Backup the database of test
"
;

backup.Initialize 
=
 
true
;

backup.SQLBackup(server);

MessageBox.Show(
"
Backup successed.
"
);

}

catch
(Exception ex)

{

MessageBox.Show(ex.Message);

}

finally

{

server.DisConnect();

}

this
.pbDB.Value 
=
 
0
;

///

///
还原方法

///

SQLDMO.Restore restore 
=
 
new
 SQLDMO.RestoreClass();

SQLDMO.SQLServer server 
=
 
new
 SQLDMO.SQLServerClass();

//
显示进度条

SQLDMO.RestoreSink_PercentCompleteEventHandler progress 
=
 
new
 SQLDMO.RestoreSink_PercentCompleteEventHandler(Step);

restore.PercentComplete 
+=
 progress;

//
KILL DataBase Process

SqlConnection conn 
=
 
new
 SqlConnection(
"
Server=.;Database=master;User ID=sa;Password=sa;Trusted_Connection=False
"
);

conn.Open();

SqlCommand cmd 
=
 
new
 SqlCommand(
"
SELECT spid FROM sysprocesses ,sysdatabases WHERE sysprocesses.dbid=sysdatabases.dbid AND sysdatabases.Name='test'
"
, conn);

SqlDataReader dr;

dr 
=
 cmd.ExecuteReader();

ArrayList list 
=
 
new
 ArrayList();

while
(dr.Read())

{

list.Add(dr.GetInt16(
0
));

}

dr.Close();

for
(
int
 i 
=
 
0
; i 
<
 list.Count; i
++
)

{

cmd 
=
 
new
 SqlCommand(
string
.Format(
"
KILL {0}
"
, list), conn);

cmd.ExecuteNonQuery();

}

conn.Close();

try

{

server.LoginSecure 
=
 
false
;

server.Connect(
"
.
"
, 
"
sa
"
, 
"
sa
"
);

restore.Action 
=
 SQLDMO.SQLDMO_RESTORE_TYPE.SQLDMORestore_Database;

restore.Database 
=
 
"
test
"
;

restore.Files 
=
 
@"
D:/test/myProg/backupTest
"
;

restore.FileNumber 
=
 
1
;

restore.ReplaceDatabase 
=
 
true
;

restore.SQLRestore(server);

MessageBox.Show(
"
Restore successed.
"
);

}

catch
(Exception ex)

{

MessageBox.Show(ex.Message);

}

finally

{

server.DisConnect();

}

this
.pbDB.Value 
=
 
0
;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: