PDA

View Full Version : سوال: چک کردن معتبر بودن ConnectionString



تبسم ساینا
دوشنبه 27 بهمن 1393, 10:38 صبح
سلام دوستان.من یه فایل متنی دارم که قراره داخلش یه رشته ConnectionString باشه.حالا میخوام بفهمم که اصلا" این فایل محتوی connectionString هست یا نه.چون ممکنه کاربر دستکاری کرده باشه.تو نت سرچ کردم یه راهش این بود که تو حلقه try گذاشته شده باشه و open بشه ولی اگه محتوی کلا" یه چیز غیر مرتبط با کانکشن استرینگ باشه حتی اگه تو try بذارم بازهم از همون دستور داخل try خطا میگیره.
کسی راهی به ذهنش میرسه؟

محمد رضا فاتحی
دوشنبه 27 بهمن 1393, 11:29 صبح
به نظر من بهترین راه کار همون try catch هست
به تابع بنویسید که اینکار رو براتون انجام بده مثلا
private bool checkconnection(string connectionString) {
SqlConnection con=new SqlConnection(connectionString);
try
{
con.Open();
con.Close();
return true;
}
catch (Exception)
{
return false;
}
}

تبسم ساینا
دوشنبه 27 بهمن 1393, 12:20 عصر
درسته این کد رو نوشتم ولی از این خط ارور میگیره !
SqlConnection con=new SqlConnection(connectionString);

با اینکه داخل try هم گذاشتم بازهم خطای زمان اجرا داره.چیکار کنم !؟
چون حتی ممکنه چیزهایی که داخل connectionString هست , چیزهای غیر مرتبط با ایتم های کانکشن استرینگ باشه!

تبسم ساینا
دوشنبه 27 بهمن 1393, 16:41 عصر
کسی راهی نمیدونه؟

محمد رضا فاتحی
سه شنبه 28 بهمن 1393, 08:00 صبح
خوب کلش رو بیارید داخل تری
private bool checkconnection(string connectionString) {
try
{
SqlConnection con=new SqlConnection(connectionString);
con.Open();
con.Close();
return true;
}
catch (Exception)
{
return false;
}
}

تبسم ساینا
سه شنبه 28 بهمن 1393, 09:58 صبح
گفتم که حتی با اینکه کلش رو گذاشتم داخل try بازم خطای زمان اجرا داشت !

محمد رضا فاتحی
سه شنبه 28 بهمن 1393, 10:11 صبح
مگه میشه؟؟؟؟ذات try catch برای جلوگیری از خطای زمان اجراس!!!:متفکر::متفکر::متفکر:

تبسم ساینا
سه شنبه 28 بهمن 1393, 10:18 صبح
منم تعجب کردم ! ولی واقعی بود ! شما تست کردید؟!

محمد رضا فاتحی
سه شنبه 28 بهمن 1393, 10:28 صبح
ببینید!
128560

تبسم ساینا
سه شنبه 28 بهمن 1393, 10:30 صبح
درسته اگه خطاش به connection ربط داشته باشه میره تو catch ولی مثلا" فرض کنید اصلآ" کانکشتن استرینگ شما یه چیز بی ربط باشه.مثلا" یه متن بیخود باشه! که اصلا" ایتم های کانکشن استرینگ رو هم نداشته باشه.اون وقت بازم try ..catch کار میکنه؟ من منظورم همینه.که تشخیص بده اصلا" این رشته معتبر هست یا نه.

محمد رضا فاتحی
سه شنبه 28 بهمن 1393, 10:44 صبح
الان تو تصویری که براتون گذاشتم دقیقا همین اتفاق افتاد هرچی توی textbox تایپ کنید اگه بتونه بوسیله اون کانکشن رو باز کنه پیام True می ده وگرنه False و این متن می تونه از فایل یا هر جای دیگه بیاد

تبسم ساینا
سه شنبه 28 بهمن 1393, 14:02 عصر
پس چرا برا من خطای زمان اجرا میگیره ! ببینید :
128568
ورژن ویژوال شما چیه؟

محمد آشتیانی
سه شنبه 28 بهمن 1393, 14:36 عصر
سلام
دوست عزیز علت اینکه تو بلوک Try .. Catch ، ارور شما هندل نمیشه اینه که این خطا جزو SqlException ها نیست!
بنابر این اگر توی قسمت Catch به جای SqlException SQLError ، بنویسید Exception SQLError این خطا هم مدیریت میشه.
(اگر هم نخواهید بصورت کلی نوع Exception رخ داده رو مدیریت کنید میتونید از ArgumentException برای مدیریت این خطا هم استفاده کنید ، یعنی دو بخش Catch داشته باشید یکی برای ArgumentException و یکی برای SqlException)

وقتی شما نوع Exception رو در قسمت Catch مشخص میکنید ، فقط استثناهایی از همون نوع در بلوک مدیریت میشن.




موفق باشید

تبسم ساینا
سه شنبه 28 بهمن 1393, 14:53 عصر
بله متوجه شدم.اخه میخوام اگه خطا مربوط به sql باشه با توجه به State اون نوع ، خطا رو بفهمم.وهمین طور اگه رشته غیر مرتبط با با کانکشن استرینگ بود.چجوری میشه هر دو تا خطا رو مدیریت کرد؟!

محمد آشتیانی
سه شنبه 28 بهمن 1393, 15:11 عصر
تو پست قبل اون قسمتی که نارنجی نوشتم توضیح دادم دوست عزیز

یعنی بلوکت به این شکل میشه (کد های مربوط به مدیریت هر کدوم از استثناها رو در بخش Catch مربوط به خودش بنویس)

try
{
SqlConnection Con = new SqlConnection("khkh");
Con.Open();
return true;
}
catch (ArgumentException ex)
{
//ArgumentExeptions
}
catch (SqlException sqlex)
{
//SqlExeptions;
}


return false;



ضمنا کانکشن رو هم ببند تو بلوک Try

موفق باشید