समाधान:
सबसे पहले आपको यह जानना होगा कि किसी भी डेटाबेस फाइल को कॉपी करने या बदलने से पहले, आपको डेटाबेस को ऑफलाइन स्थिति में सेट करना होगा और खत्म होने के बाद इसे ऑनलाइन वापस लाना होगा।
1) प्रयुक्त तरीके
// fullPath : the path for your database
// executablePath : the path for your exe folder
void setFullPath()
{
string executable = System.Reflection.Assembly.GetExecutingAssembly().Location;
executablePath = (System.IO.Path.GetDirectoryName(executable));
fullPath = executablePath + "\\Database.mdf";
}
void takeOffline(string fullPath)
{
homeObject.connection.Open();
homeObject.cmd.CommandText = "ALTER DATABASE [" + fullPath + "] SET OFFLINE";
homeObject.cmd.ExecuteNonQuery();
homeObject.cmd.Clone();
}
void bringOnline(string fullPath)
{
homeObject.cmd.CommandText = "ALTER DATABASE [" + fullPath + "] SET ONLINE"; ;
homeObject.cmd.ExecuteNonQuery();
homeObject.cmd.Clone();
homeObject.connection.Close();
}
2) डेटाबेस फाइल / बैकअप कॉपी करें
bool getDatabaseCopy()
{
try
{
//
takeOffline(fullPath);
// copy database.mdf
copyDBMDF();
// copy database_log.ldf
copyDB_logLDF();
//
bringOnline(fullPath);
return true;
}
catch
{
//
}
return false;
}
// txtPath.txt :
// folder location to save database files in
void copyDBMDF()
{
string fileName = "Database.mdf";
string sourceFile = fullPath;
string targetPath = txtPath.Text;
// Use Path class to manipulate file and directory paths.
string destFile = System.IO.Path.Combine(targetPath, fileName);
// To copy a folder's contents to a new location:
// Create a new target folder, if necessary.
if (!System.IO.Directory.Exists(targetPath))
{
System.IO.Directory.CreateDirectory(targetPath);
}
// To copy a file to another location and
// overwrite the destination file if it already exists.
System.IO.File.Copy(sourceFile, destFile, true);
}
void copyDB_logLDF()
{
string fileName = "Database_log.ldf";
string sourcePath = executablePath;
string targetPath = txtPath.Text;
// Use Path class to manipulate file and directory paths.
string sourceFile = System.IO.Path.Combine(sourcePath, fileName);
string destFile = System.IO.Path.Combine(targetPath, fileName);
// To copy a folder's contents to a new location:
// Create a new target folder, if necessary.
if (!System.IO.Directory.Exists(targetPath))
{
System.IO.Directory.CreateDirectory(targetPath);
}
// To copy a file to another location and
// overwrite the destination file if it already exists.
System.IO.File.Copy(sourceFile, destFile, true);
}
3) वर्तमान डेटाबेस फ़ाइलों को उन फ़ाइलों से बदलें जिन्हें आप कॉपी/पुनर्स्थापित करते हैं
bool restoreTheBackup()
{
try
{
//
takeOffline(fullPath);
// load .mdf
loadMDFDatabaseFile();
// load _log.ldf
loadLDFDatabaseFile();
//
bringOnline(fullPath);
return true;
}
catch
{
//
}
return false;
}
// txtPath.txt :
// location to get database files from to replace with current files.
void loadLDFDatabaseFile()
{
string fileName = "Database_log.ldf";
string targetPath = executablePath;
string sourcePath = txtPath.Text;
// Use Path class to manipulate file and directory paths.
string sourceFile = System.IO.Path.Combine(sourcePath, fileName);
string destFile = System.IO.Path.Combine(targetPath, fileName);
// To copy a folder's contents to a new location:
// Create a new target folder, if necessary.
if (!System.IO.Directory.Exists(targetPath))
{
System.IO.Directory.CreateDirectory(targetPath);
}
// To copy a file to another location and
// overwrite the destination file if it already exists.
System.IO.File.Copy(sourceFile, destFile, true);
}
void loadMDFDatabaseFile()
{
string fileName = "Database.mdf";
string targetPath = executablePath;
string sourcePath = txtPath.Text;
// Use Path class to manipulate file and directory paths.
string sourceFile = System.IO.Path.Combine(sourcePath, fileName);
string destFile = System.IO.Path.Combine(targetPath, fileName);
// To copy a folder's contents to a new location:
// Create a new target folder, if necessary.
if (!System.IO.Directory.Exists(targetPath))
{
System.IO.Directory.CreateDirectory(targetPath);
}
// To copy a file to another location and
// overwrite the destination file if it already exists.
System.IO.File.Copy(sourceFile, destFile, true);
}