现在SQL数据库是一台机子,WEB服务器又是另一台机子,我现在想把备份的文件就放在WEB服务器上相对应的WEB应用程序的文件夹里,这该怎么做??
SQLDMO备份输入的FileName是指数据库服务器上的文件路径,如何设置路径让SQLDMO备份到WEB服务器呢??
谢谢各们高手了!!
SQLDMO备份输入的FileName是指数据库服务器上的文件路径,如何设置路径让SQLDMO备份到WEB服务器呢??
谢谢各们高手了!!
解决方案 »
- 获取Gridview PagerTemplate中用户控件
- POP3,怎麼用C#通過POP3抓取到GMail的郵件信息
- 用户控件中集合属性如何在调用控件的前台aspx文件中赋值?
- 为什么禁用web控件的视图状态后,控件的一些事件就不会激发?
- ***200分,求“图片裁剪效果”,由于本人急用,并且没有能力自己完成,谢谢哪位兄弟帮助一下。
- 为什么在xp下开发的.net代码在server2003上不能调试?
- 大家对C/S应用转到B/S有什么看法?
- 请教一个文件上传的问题
- 为什么DropDownList1_TextChanged事件不被执行?
- asp.net 页面的textbox 设置为多行文本框之后后台无法获取值
- 关于用DataGrid显示主从关系的问题(VB)
- datagrid问题
/// 数据传输
/// </summary>
/// <param name="SrcDatabase"></param>
/// <param name="ServerName"></param>
/// <param name="DBUserName"></param>
/// <param name="DBPassword"></param>
/// <param name="IsIntegrated"></param>
/// <param name="DestDatabase"></param>
private void TransferDatabaseToServer(string SrcDatabase,string ServerName,string DBUserName,string DBPassword,bool IsIntegrated,string DestDatabase)
{
SQLDMO.SQLServer2 oServer = new SQLDMO.SQLServer2Class();
SQLDMO.Database2 oDatabase;
SQLDMO.Transfer2 oTransfer = new SQLDMO.Transfer2();
oTransfer.IncludeDependencies = false;
oServer.LoginSecure = false;
oServer.Connect(ServerName,DBUserName,DBPassword);
oDatabase = (SQLDMO.Database2)oServer.Databases.Item(SrcDatabase,"");
oTransfer.DestDatabase = DestDatabase;
oTransfer.CopyAllTables = true;
oTransfer.CopyAllObjects = true;
oTransfer.CopyAllDefaults = false;
oTransfer.CopyAllRules = true;
oTransfer.CopyAllStoredProcedures = true;
oTransfer.CopyAllTriggers = true;
oTransfer.CopyAllViews = true;
oTransfer.CopySchema = true;
oTransfer.CopyData = SQLDMO.SQLDMO_COPYDATA_TYPE.SQLDMOCopyData_Replace;
oTransfer.DestTranslateChar = true;
oTransfer.DropDestObjectsFirst = true;
oTransfer.IncludeDB = false; //是否在目标数据库不存在的情况下创建数据库
oTransfer.IncludeGroups = false;
oTransfer.IncludeUsers = false;
oTransfer.IncludeLogins = false;
oTransfer.IncludeDependencies = false;
oTransfer.DestUseTrustedConnection = false;
oTransfer.DestLogin = DBUserName;
oTransfer.DestPassword = DBPassword;
oDatabase.Transfer(oTransfer);
oServer.DisConnect();
oServer = null;
System.Runtime.InteropServices.Marshal.ReleaseComObject(oTransfer);
System.Runtime.InteropServices.Marshal.ReleaseComObject(oDatabase);
//System.Runtime.InteropServices.Marshal.ReleaseComObject(oServer);
System.GC.Collect();
}
你是说手动??可以说得详细一点吗?
也可以用windows自带的任务
SQLDMO(SQL Distributed Management Objects,SQL分布式管理对象)封装了Microsoft SQL Server数据库中的对象。SQLDMO是Microsoft SQL Server中企业管理器所使用的应用程序接口,所以它可以执行很多功能,其中当然也包括对数据库的备份和恢复。SQLDMO由Microsoft SQL Server自带的SQLDMO.dll提供,由于SQLDMO.dll是一个COM对象,所以大家在用之前必须在.NET项目中添加对它的引用,如下图所示:下面是用C#语言书写的用于Microsoft SQL Server数据库备份和恢复的类:using System;namespace DbService
{
/// <summary>
/// DbOper类,主要实现对Microsoft SQL Server数据库的备份和恢复
/// </summary>
public sealed class DbOper
{
/// <summary>
/// DbOper类的构造函数
/// </summary>
private DbOper()
{
}/// <summary>
/// 数据库备份
/// </summary>
public static void DbBackup()
{
try
{
SQLDMO.Backup oBackup = new SQLDMO.BackupClass();
SQLDMO.SQLServer oSQLServer = new SQLDMO.SQLServerClass();
oSQLServer.LoginSecure = false;
oSQLServer.Connect("localhost", "sa", "1234");
oBackup.Action = SQLDMO.SQLDMO_BACKUP_TYPE.SQLDMOBackup_Database;
oBackup.Database = "Northwind";
oBackup.Files = @"d:\\Northwind.bak";
oBackup.BackupSetName = "Northwind";
oBackup.BackupSetDescription = "数据库备份";
oBackup.Initialize = true;
oBackup.SQLBackup(oSQLServer);
}
catch
{
throw;
}
}/// <summary>
/// 数据库恢复
/// </summary>
public static void DbRestore()
{
try
{
SQLDMO.Restore oRestore = new SQLDMO.RestoreClass();
SQLDMO.SQLServer oSQLServer = new SQLDMO.SQLServerClass();
oSQLServer.LoginSecure = false;
oSQLServer.Connect("localhost", "sa", "1234");
oRestore.Action = SQLDMO.SQLDMO_RESTORE_TYPE.SQLDMORestore_Database;
oRestore.Database = "Northwind";
oRestore.Files = @"d:\\Northwind.bak";
oRestore.FileNumber = 1;
oRestore.ReplaceDatabase = true;
oRestore.SQLRestore(oSQLServer);
}
catch
{
throw;
}
}
}
}
参见在C#中运用SQLDMO备份和恢复Microsoft SQL Server数据库
http://dev.csdn.net/develop/article/28/28564.shtm
当不使用要恢复的数据库时以上方法可行,但当你使用了数据库时就必须杀死该进程
代码如下: /// <summary>
/// 还原数据库函数
/// </summary>
/// <param name="strDbName">数据库名</param>
/// <param name="strFileName">数据库备份文件的完整路径名</param>
/// <returns></returns>
public bool RestoreDB(string strDbName,string strFileName)
{
//PBar = pgbMain ;
SQLDMO.SQLServer svr = new SQLDMO.SQLServerClass() ;
try
{
//服务器名,数据库用户名,数据库用户名密码
svr.Connect("localhost","sa","hai") ;
SQLDMO.QueryResults qr = svr.EnumProcesses(-1) ;
int iColPIDNum = -1 ;
int iColDbName = -1 ;
for(int i=1;i<=qr.Columns;i++)
{
string strName = qr.get_ColumnName(i) ;
if (strName.ToUpper().Trim() == "SPID")
{
iColPIDNum = i ;
}
else if (strName.ToUpper().Trim() == "DBNAME")
{
iColDbName = i ;
}
if (iColPIDNum != -1 && iColDbName != -1)
break ;
}
//杀死使用strDbName数据库的进程
for(int i=1;i<=qr.Rows;i++)
{
int lPID = qr.GetColumnLong(i,iColPIDNum) ;
string strDBName = qr.GetColumnString(i,iColDbName) ;
if (strDBName.ToUpper() == strDbName.ToUpper())
{
svr.KillProcess(lPID) ;
}
}
SQLDMO.Restore res = new SQLDMO.RestoreClass() ;
res.Action = 0 ;
res.Files = strFileName ; res.Database = strDbName ;
res.ReplaceDatabase = true ;
res.SQLRestore(svr) ;
return true ;
}
catch
{
return false;
}
finally
{
svr.DisConnect() ;
}
}
你就可以通过用户设置的时间来备份数据库了,可以用定时器实现