SQL Server backup utility using VB.Net
Google

 

Whenever we want to backup or move SQL Server database, most of us prefer to use regular backup utility which is available through Enterprise Manager in SQL Server 2000 or Management Studio in SQL Server 2005. Limitation of using Enterprise Manager or Management Studio is we have to use either complete or differential backups. This is a very tedious task when we want to backup only a small portion of a large database. For example, in my database I would like to take backup of only 15 tables out of 100 tables or I may want to backup only a few records from these selected tables. For that reason I was looking for a small utility which allows me to do so. After searching through hundreds of utility programs, I have decided to write my own utility.

New Release (1.1.0)

It has been a year since I wrote this article. I got many responses for this backup utility. So I decided to update this program and made major changes to make it more stable in terms of functionality and performance. Here is a list of changes I have made in this program.

  • Backup file extension is now .ZIP instead of .SQLBackup. This is to avoid any confusion.
  • Old version was having issue with restoring data in certain conditions. It should have been fixed in this version.
  • Multi threading is added with backup and restore processes. This way program won't freeze during long operations.
  • UI is improved to display proper status of backup and restore.
  • Included GNU license.
Download Source Download Source (941KB)
Download Source Download Setup (2MB)


Features

  • Backup of selected objects
  • Backup of selected data
  • Backup of only scripts
  • Backup of only data
  • Backup of both scripts and data
  • Supports backup from remote severs over web, LAN or even local pc.

Using Program

DBBackup.jpg

To backup database,

  • Open database backup window from tools menu.
  • Enter server name, database name, user name and password for SQL Server.
  • Click on Connect. This will display all available tables, views, stored procedures, user defined functions, user defined datatypes and users from database.
  • If you want to backup only data, check Backup Data and remove checkmark from Backup object structures (Scripts).
  • If you want to backup only scripts, check Backup object structures (Scripts) and remove checkmark from Backup Data.
  • Select objects that you want to backup from list. By default all objects are selected. In above picture, Adv_StackedBar2 and Adv_UserRoleTypes tables will be excluded from backup.
  • Apply any condition on table data. For example 'UserID > 10 and UserID < 25' in above picture. It means only those records will be exported which satisfy this condition.
  • Modify number of rows to export on a particular 'table'. For example in above picture 'Top 20 *', means only top 20 rows will be exported for 'Adv_TodaysOutlook' table.
  • Click on Start Backup. It will ask you to enter a file name and location. Note that backup file has extension *.zip. Remeber this is not a standard sql server backup file. It's just a zip file which contains scripts for tables, views, stored procedures etc. It also includes data in row (.dat) files.

    To restore backup,

  • Open Database restore window from tools menu.


DBRestore.jpg

  • Enter server name, database name, user name and password for SQL Server.
  • Select database backup file(*.zip) that you want to restore. Remeber this utility can only restore those backup files(*.zip) which are created by this utility itself. It can not restore regular sql server backup file.
  • When you select backup file, it displays all objects available in backup.
  • If you want to create a new database, check Create New Database option.
  • If you want to drop existing database and recreate it, check Drop Existing Database option.
  • Select objects that you want to restore from list. By default all objects are selected.
  • Click on Start Restore.

 


Using other features

As you can see both backup and restore forms include Preset combo box. What it does is it records server name, database name, user name and password information every time you backup or restore a database. Next time when you want to use same server you don't need to enter all these parameters again. You can select it from Preset combo list. It also remembers last accessed sql server name. 

Using Code

I am not writing description of code in much detail. Most of the code is self explanatory and commented. Just a few quick notes. I have used SQL-DMO library for all database related tasks. For SQL-DMO library either SQL Express or SQL Server 2000 client tools must be installed on your computer.

Objects from SQL-DMO Library

	'Server object from SQL-DMO library
Dim oServer As New SQLServer2
'Database object from SQL-DMO library
Dim db As SQLDMO.Database2
'BCP Utility from SQL-DMO Library
Dim objBCP As New SQLDMO.BulkCopy2
Function for exporting data to a file from SQL Server
objBCP.DataFilePath = "c:\temp\EmployeeData.dat"
db.Tables.Item("Employee").ExportData(objBCP)
Generating SQL Script for an SQL Server object.
'Generate script with drop statement
Dim SQL as String =
db.GetObjectByName("Employee").Script(SQLDMO_SCRIPT_TYPE.SQLDMOScript_Drops)
+ db.GetObjectByName("Employee").Script()

Limitations

This utility can not take backup of user roles and triggers.
Backup file is in zip format. (You can extract it using winzip or other zip utility and view its content.). It can not be restored using SQL Server Enterprise Manager. 

Enhancements

This program can be enhanced further to include a windows service which can take regular backups for SQL Server without user interactions. Thus this utility can be utilized for your regular backups.

Acknowledgments

I have used SharpZipLib(ICSharpCode.SharpZipLib.dll), a free open source zip utility library available from http://www.icsharpcode.net, for zipping backup directory. This file is included in Bin\Release folder.

Requirements

Visual Studio.Net 2005 (For source code)

.Net Framework 2.0

MS SQL Server 2000 or MS SQL Express 2005 or MS SQL Server 2005 client components (For SQL-DMO Library)


How to install utility

  • Make sure that you have either SQL Server 2000 or 2005 client components installed on your computer. If you do not want to install these components, you can install Microsoft SQL Server 2005 Backward Compatibility Components. You can download it from following link,
    Download Microsoft SQL Server 2005 Backward Compatibility Components
    These components are needed for SQL-DMO library
  • Download setup zip file from link provided on top of this article. Extrace and run setup.exe. It should create icons in your programs menu and desktop

How to use source code

  • Download source code zip file from link provided on top of this article and run DatabaseBackup.sln solution file with Visual Studio 2005.

Special Notes

I have published this article on codeproject.com as well. Here is the link to this article.

http://www.codeproject.com/vb/net/SQLDBBackup.asp  



Comments/Questions

Add New Comment/Question

Doesn't work with vista.
It gives error saying it has stopped working as soon as I hit backup.

It connects fine to the server and displays tables and other objects but cant backup.
thanks for any input.
=> sunny (Friday 14-Mar-08 11:39 AM)
Reply
Hi Sunny,

Can you give detailed error message that you are getting?
=> Shabdar (Friday 14-Mar-08 01:59 PM)
Reply
Hi,
It just says "Backup Database has stopped working".
I have uploaded the screenshot at
http://img233.imageshack.us/my.php?image=vistaerrorod1.jpg
=> sunny (Friday 14-Mar-08 03:51 PM)
Reply
Hmmm..I think Vista is giving a more generalized error rather than giving proper description. Try running this application as administrator? It might be some privilege related error.

Can you check event viewer on your PC? It should have some description about this error.
=> Shabdar (Saturday 15-Mar-08 02:11 PM)
Reply
Thanks for the great work. Problem however; I'm backing up from SQL Server 2005 Express, user table data only, that works fine.

But when I open the zip file to restore, no objects (table names I assume) appear in the Tables tab below. Nothing appears there at all. Is this a known bug with a fix? Running Windows XP SP2, SQL 2005 Express SP2 SSMS.

Cheers!
=> Andrew (Tuesday 25-Mar-08 08:04 AM)
Reply
Great program, but I wonder if in a future version it will manage schema, i mean make a back up of a schema, or filter the tables by schema?
=> Daniel Brito (Thursday 10-Apr-08 12:20 PM)
Reply
It's already backing up schema. It's not limited to data.
=> Shabdar (Sunday 13-Apr-08 01:55 PM)
Reply
From what I have researched so far sounds like a great program! 2 questions though. 1) Is the database actually compressed?

2) Could I use this program with the task scheduler to backup every night? Basically write a batch file that starts the program executes and closes.

Thanks much
=> Mike (Sunday 13-Apr-08 11:12 PM)
Reply
(1) Yes, database is compressed in Zip format

(2) No presently this program can not be used with scheduler. Good suggestion though. I would like to release this version.
=> Shabdar (Monday 14-Apr-08 08:48 AM)
Reply
Sometimes I get error while backing up tables and program shutdown intermittently.

I backed up the Data and object structure in 2 different file and that worked

Excellent, program to back the SQL Server.
=> Sarfaraz (Monday 14-Apr-08 08:24 AM)
Reply
It would be helpful if you can give me detailed error message. If program is giving more generic error, check your Event viewer and see if it has any description.

Someone has reported that this program does not work well with Vista. If that is the case, try using it with Windows XP. I don't have Vista, so I could not test it.

=> Shabdar (Monday 14-Apr-08 08:51 AM)
Reply
Hi
Great prog. But it doesn't work when a table is into a schema.

like mike.table1 (not dbo.table1).
=> mike (Wednesday 30-Apr-08 03:52 AM)
Reply
same question here
=> Daniel Brito (Wednesday 30-Apr-08 10:11 AM)
Reply
Mister, can I use with integrated authentication ? thanks in advance
=> ae (Wednesday 30-Apr-08 09:29 AM)
Reply
Mister, why use OleDb Connection, not Sql Server Connection? any reason about it ? thanks.
=> ae (Wednesday 30-Apr-08 10:02 AM)
Reply
Whenever i am trying to take backup i click on connect button, it connects and shows all table of database but not taking
backup sometime it show this error
"Could not find file 'D:Documents and SettingsAdministratorDesktopDatabaseBackupbinDebugBackupTempAccessories.dat'."
=> Ershad Ali (Saturday 21-Jun-08 05:28 AM)
Reply
after clicking on connect button showing all tables, but when trying to take backup by click on back button it shows sometime this error also
"[Microsoft][ODBC SQL Server Driver][SQL Server]Code page 720 is not supported by SQL Server
[Microsoft][ODBC SQL Server Driver]Unable to resolve column level collations"
=> Ershad Ali (Saturday 21-Jun-08 05:33 AM)
Reply
Hi
please give me solution for my problem which i mention earlier
=> ershad ali (Monday 23-Jun-08 09:58 AM)
Reply
Visit following link. It addresses this issue,

http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=58290

=> Shabdar (Monday 07-Jul-08 11:24 AM)
Reply
is there a way to compare the script prepared by the objects and come with a change in any objects by keeping a source and destination server. Something like a database sync utility.
=> AK (Wednesday 25-Jun-08 03:45 PM)
Reply
when i restore database form local machine to remote server that time my table name is change with dbo,means my table name is citymaster then it display on server usrname.citymaster and this give error when i run my application what is solution
=> Amit (Saturday 05-Jul-08 04:50 AM)
Reply
Go to clsScript.vb file. Search for term "dbo" and remove it. Run project again. It should work.
=> Shabdar (Monday 07-Jul-08 11:15 AM)
Reply
Forgot to mention that there are multiple places in clsScript.vb file where you need to remove dbo.
=> Shabdar (Monday 07-Jul-08 11:16 AM)
Reply
great program keep on developing
much respect from africa
=> paul (Tuesday 15-Jul-08 03:49 AM)
Reply
Wanted to know what this error was.

[Microsoft][ODBC SQL Server Driver][SQL Server]Line 38: Length or precision specification 0 is invalid. [Microsoft][ODBC SQL Server Driver][SQL Server]Invalid object name '[tableName]'.

It happens only on 1 of my tables, but when ive done other databases and tried to restore same problem.
=> Dk (Friday 18-Jul-08 02:01 AM)
Reply
How Can I work with windows authentication database (itegerated security)
the backup utility doesn't work on this case
=> Nisreen (Sunday 27-Jul-08 03:15 AM)
Reply
I have the same problem, ive enable mixed authentication in SQL Management Studio and nothing. what i did was i enabled the SA account in sql manager and changed the password. then you use the sa login account to go connect to the database that you want to backup/restore
=> Donovan (Monday 28-Jul-08 09:51 AM)
Reply
the program make the backup and restore but only the structure no the data, how can backup all the record for each table ?
=> roberto (Friday 01-Aug-08 10:41 AM)
Reply
Hi
Its a very helpful project can I get the same in
Csharp .net
=> Anu (Saturday 02-Aug-08 04:13 AM)
Reply
i found a problem when restoring a database with tables linked by foreign key , where when adding the table it adds all its relation regardless that the related table has not beeen created yet.
=> walid (Sunday 03-Aug-08 02:19 AM)
Reply
If you want there is another way to backup your database and restore it. You just have to add the functionality in your form to make it work.

Backup Database dbName to disk = location

and if you want to restore it

Restore database dbName from disk = location

the locations of both backup/restore need to include the database name for eg C:..Backup..dbName.bak
=> Donovan (Monday 04-Aug-08 01:09 AM)
Reply
the problem is when restoring a database with tables linked together by a foreign key, an error is caused to prevent the creation of the rest of tables because it fails to find the other table which it has a relation with.
=> walid (Monday 04-Aug-08 10:08 AM)
Reply
hi
i was use the source in sql database project with vb2005, when i use the backup and restore form, a message box appear that (Check Parameters, SQL server does not exists or invalid user name and password given . check Server name or password and username)
=> mc (Saturday 09-Aug-08 12:05 AM)
Reply
Sounds like your connection string is not structured correctly.

Server=(local);Data Source=.sqlexpress;Integrated Security=True

use that one.



=> Donovan (Monday 11-Aug-08 01:17 AM)
Reply
After i was clicking on The connect button showing all tables, but when i'm trying to get backup by click on backup button, i have this error "[Microsoft][ODBC SQL Server Driver][SQL Server]Code page 720 is not supported by SQL Server
[Microsoft][ODBC SQL Server Driver]Unable to resolve column level collations"
=> mc (Saturday 13-Sep-08 12:59 AM)
Reply
well, when i start debugging the code source, and after clicking Start Backup, the compiler stop on this code:
"db.Tables.Item(sTableName).ExportData(objBCPExport)" in the 'ExportData' function in 'clsScript' Class.
did u have any solution,
=> mc (Saturday 13-Sep-08 01:09 AM)
Reply
Thanks for this Backup Utility!!! I translated it to Spanish so if you want it just ask... thanks again...
=> Jorge Villacorta (Thursday 18-Sep-08 11:33 PM)
Reply