PDA

View Full Version : سوال: چک کردن سالم بودن بانک اطلاعاتی قبل از لود شدن برنامه



دلتنگ اسمان
چهارشنبه 12 شهریور 1393, 10:16 صبح
با سلام
با کد زیر برای Restore کردن استفاده میکنم. اما این در شرایطی جواب میده که بتونم با دیتابیس ارتباط برقرار کنم. اگه دیتابیس به هر دلیلی حذف شده باشه و یا جداولش حذف شده باشن این کد عملا کاربردی نخواهد داشت.
چطور میشه هنگام لود برنامه اول دیتابیس رو چک کنه اگه دیتابیس و یا جداولش وجود نداشت پیغام بده. و با تایید کاربر عمل Restore انجام بشه. البته حتما باید ساخت دیتابیس و جداولش هم در کد گنجانده شود.
public void Restore(string strFileName)
{
try
{
if (strFileName != string.Empty)
{
string command =
"ALTER DATABASE matab SET OFFLINE with ROLLBACK IMMEDIATE RESTORE DATABASE matab FROM DISK = '" +
strFileName + "' WITH REPLACE";

var oConnection =
new SqlConnection("server=localhost;Integrated security=true;database=matab");
if (oConnection.State != ConnectionState.Open)
oConnection.Open();
var oCommand = new SqlCommand(command, oConnection);
oCommand.ExecuteNonQuery();
MessageBox.Show(". بازيابی اطلاعات از نسخه پشتيبان با موفقيت انجام شد");
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}

parvizwpf
چهارشنبه 12 شهریور 1393, 10:22 صبح
اینها رو نگاهی بندازید:
http://stackoverflow.com/questions/3528361/is-there-an-way-using-ado-net-to-determine-if-a-table-exists-in-a-database-that
http://www.codeproject.com/Articles/30957/Check-if-a-table-or-field-exists-in-a-database

دلتنگ اسمان
چهارشنبه 12 شهریور 1393, 12:34 عصر
طبق این کد چک میکنم ولی با اینکه این دیتابیس وجود داره مقدار رو 1- برمیگردونه.

public bool isDBExist()
{
string connString = "server=localhost;Integrated security=true";
string cmdText = "SELECT name FROM sys.databases WHERE name = 'matab'";
bool bRet = false;
using (SqlConnection sqlConnection = new SqlConnection(connString))
{
sqlConnection.Open();
using (SqlCommand sqlCmd = new SqlCommand(cmdText, sqlConnection))
{
int nRet = sqlCmd.ExecuteNonQuery();
if (nRet <= 0)
{
bRet = false;
}
else
{
bRet = true;
}
}
}
return bRet;

}

parvizwpf
چهارشنبه 12 شهریور 1393, 17:03 عصر
این تیکه سلکت آیا تو خود sql داره دیتا برمیگردونه؟

دلتنگ اسمان
چهارشنبه 12 شهریور 1393, 17:22 عصر
این تیکه سلکت آیا تو خود sql داره دیتا برمیگردونه؟

منظورتون رو متوجه نمیشم . یعنی چی توی خود sql ؟ یعنی این سلکت رو توی sql اجرا کنم و جواب بگیرم؟ توی خود sql اجرا نکردم.

ghasem110deh
چهارشنبه 12 شهریور 1393, 19:17 عصر
شرمنده سوال بی ربط میپرسم :
یعنی اگه مثلا - ویندوز بپره یا قاتی کنه که دوباره نصب کنی - بعد برنامه رو نصب کنی ، بک آپ که قبلا گرفتی جواب نمیده !؟

دلتنگ اسمان
پنج شنبه 13 شهریور 1393, 11:26 صبح
از مهندسین محترم کسی نیست کمک کنه؟ ببخشید اگه کسی میتونه کمک کنه ممنون میشم راهنمایی کنه. گرچه جناب parvizwpf (http://barnamenevis.org/member.php?243106-parvizwpf) راهنمایی کردن اما مشکلم حل نشد.!!

mz6488
پنج شنبه 13 شهریور 1393, 13:42 عصر
سلام.کد زیر واسه چک کردن کردن وجود دیتابیس.برای ریستور هم اگه جدول ها حذف بشه موردی نداره و عملیات ریستور کاملا انجام میشه

USE [master]

declare @result nvarchar(20)

IF (EXISTS (SELECT name
FROM master.dbo.sysdatabases
WHERE ('[' + name + ']' = 'dbName'
OR name = 'dbName')))

set @result= 'exists'

else
set @result= 'not exist'

بعد مقدار result رو بگیرین و بر اساس اون پیغام رو به کاربر نشون بدین

mz6488
پنج شنبه 13 شهریور 1393, 13:44 عصر
دقت داشته باشین که برای انجام این کار حتما با دیتابیس master کانکت بشین

دلتنگ اسمان
شنبه 15 شهریور 1393, 10:35 صبح
سلام.کد زیر واسه چک کردن کردن وجود دیتابیس.برای ریستور هم اگه جدول ها حذف بشه موردی نداره و عملیات ریستور کاملا انجام میشه

USE [master]

declare @result nvarchar(20)

IF (EXISTS (SELECT name
FROM master.dbo.sysdatabases
WHERE ('[' + name + ']' = 'dbName'
OR name = 'dbName')))

set @result= 'exists'

else
set @result= 'not exist'

بعد مقدار result رو بگیرین و بر اساس اون پیغام رو به کاربر نشون بدین

این رو توی sql باید بنویسم؟ من توی خود sql تا حالا کد ننوشتم. اگه میشه لطفا دقیق تر بهم توضیح بدید ممنون میشم.
یعنی یه کوئری توی sql تعریف کنم و این کد رو توی اون ذخیره کنم؟ بعد کوئری رو کجا باید ذخیره کنم؟ و چطوری از توی C# باهاش ارتباط برقرار کنم?