各位大哥,怎么用VC实现对数据库的备份及恢复
怎么用VC实现对数据库的备份及恢复?主要是对表空间,不是整个数据库。最好有源代码! 先谢谢了。
我的EMAIL joiny123@163.com
问题点数:50、回复次数:13Top
1 楼joshua0137(joshua)回复于 2002-04-26 16:39:40 得分 0
你是用SQL SERVER 吗?Top
2 楼dyw(旺仔)回复于 2002-04-26 20:02:50 得分 5
在数据库中先布置好的你的“对数据库的备份及恢复”的存储过程,在你的VC应用中调用它吧!否则真的得请教你所用的数据库了。Top
3 楼joiny2000()回复于 2002-04-26 21:35:45 得分 0
先谢过各位大哥了:
我用的是SQLSERVER,可我对存储过程不是很熟的。还有能给我一个具体的例子吗?有源代码最好!
旺仔兄: 你的意思是不是在存储过程中写备份和恢复?比如说备份的话写:create proc pro_backup
as
backup database databasename to "绝对路径名"
再在控制体中用VC编程调用存储过程(pro_backup)
但是我听说还要先连接数据库,还要该执行体执行结果.其中的过程我不是很清楚,能给我回复吗?
Top
4 楼joiny2000()回复于 2002-04-26 21:35:57 得分 0
先谢过各位大哥了:
我用的是SQLSERVER,可我对存储过程不是很熟的。还有能给我一个具体的例子吗?有源代码最好!
旺仔兄: 你的意思是不是在存储过程中写备份和恢复?比如说备份的话写:create proc pro_backup
as
backup database databasename to "绝对路径名"
再在控制体中用VC编程调用存储过程(pro_backup)
但是我听说还要先连接数据库,还要该执行体执行结果.其中的过程我不是很清楚,能给我回复吗?
Top
5 楼despird(砉箟)回复于 2002-04-26 21:55:55 得分 5
用SQL server的备份或是DTS。
如果是备份,就用BACKUP做SQL,然后做成带参数的BAT用程序调用就行了。详见isql -?,就一句话的事。
如果dts,生成一个DTS包,然后也做BAT,详见dtsrun -?,BAT里也就一句话。
Top
6 楼small_wei(small)回复于 2002-04-26 23:15:09 得分 40
备份:
CDatabase db;
CString s1;
s1.Format("ODBC;UID=sa;PWD=%s","wei147");
db.Open("odbcname",false,false,s1);
s1.Format("backup database report to disk='e:\\report.bak\\backs.dat'"); //备份到E:\report.bak\backs.dat
db.ExecuteSQL(s1);
恢复:
恢复时用户不能打开要恢复的数据库
CDatabase db1;
s1.Format("ODBC;UID=sa;PWD=%s","wei147");
db1.Open("odbcname",false,false,s1);
s1.Format("restore database report from disk='c:\\report.bak\\backs.dat'");
db1.ExecuteSQL(s1);
db1.Close();
Top
7 楼joiny2000()回复于 2002-04-27 09:39:33 得分 0
small_wei(small)兄:
我用了你这种方法,但是还不行啊!是不是我水平真的太菜了? 我用的是ADO。 因为我的程序一执行就连接到数据库的,所以我只在备份事件中写了一句执行SQL语句。 能不能再指点一二?Top
8 楼small_wei(small)回复于 2002-04-27 18:39:43 得分 0
道理是一样的在ADO中直接执行SQL语句
backup database report to disk='e:\\report.bak\\backs.dat'
restore database report from disk='c:\\report.bak\\backs.dat'
既可.Top
9 楼joiny2000()回复于 2002-04-28 09:04:06 得分 0
谢谢small_wei(small)兄的热情帮忙,一定给分。 不过我还有一个问题, 我要把一张表的数据导出来和导进数据库。不知如何编程实现?Top
10 楼small_wei(small)回复于 2002-04-28 18:12:54 得分 0
是在同一数据库中?
如果是在不同的数据库中,特别是不同类型的数据库时,可以用DTS事先定义好数据库的导入导出,具体的可以在sql server帮助中找到,然后在VC中调用.Top
11 楼joiny2000()回复于 2002-04-29 12:24:38 得分 0
我只要把表中的数据导出为文本文件(txt),因为这张表的数据量比较大,需要定期导出,但是要查询这些数据时,又要全部导入。 这有点相当于数据库的增量备份。老大,怎么做?
我试过以下代码,但是没有导出数据。
sCmd = "bcp CDS.dbo." + tableName + " out " + tablePath + " -c -SSERVER -U distributor -P distributor";
WinExec(sCmd,SW_HIDE);
不知哪里有问题?
多谢small_wei(small)的回复!好人做到底,帮小弟一把!
Top
12 楼small_wei(small)回复于 2002-04-30 00:35:08 得分 0
在sql server的企业管理器中的注册服务器中,找到数据转换服务项,在本地包中建立一个数据转换新包,这个包可以设定任何时间运行,实现定期将数据导出.然后再建立一个包,做数据的导入,用DTSRUN运行,具体操作与相关信息可在MSDN中输入DTS进行查询.
对于BCP可参阅:
For example, the Northwind database has the table Jane's Orders, which is owned by user Jane Doe. To bulk copy this table from the Northwind database to the Orders.txt file using the login Jane Doe and the password go dba, execute one of these commands:
bcp "Northwind.Jane Doe.Jane's Orders" out "Jane's Orders.txt" -c -q -U"Jane Doe" -P"go dba"
Top
13 楼joiny2000()回复于 2002-04-30 08:32:51 得分 0
谢谢small_wei(small)的帮忙。 这个问题我已解决了。
结贴了!Top




