PDA

View Full Version : سوال: یک ایراد عجیب در بالا آوردن سایت



khorsandreza
چهارشنبه 29 خرداد 1392, 18:35 عصر
سلام
من یک سایت طراحی کرده ام یک مشکل عجیبی روی میده نصویر را ببینید من اصلا چنین روتینی را در فایل Global.asax ندارم این خطا چگونه اتفاق می افته؟

Cybersilent
پنج شنبه 30 خرداد 1392, 14:13 عصر
احتمالا اتصالی به بانک اطلاعاتی برقرار کردید و اون رو باز نگه داشتید.
ببینید کجا db.open() رو نوشتید اما db.close() رو ننوشتید.
از اون قسمتی هم که علامت زدید نمیشه فهمید مشکل کجاست باید کدهای ارتباط با بانک اطلاعاتی رو بزارید تا بشه فهمید.

fakhravari
پنج شنبه 30 خرداد 1392, 14:22 عصر
http://barnamenevis.org/showthread.php?33592-%D9%87%D9%85%D9%87-%DA%86%DB%8C%D8%B2-%D8%AF%D8%B1%D8%A8%D8%A7%D8%B1%D9%87-%DB%8C-Connection-Pooling

khorsandreza
دوشنبه 03 تیر 1392, 12:08 عصر
احتمالا اتصالی به بانک اطلاعاتی برقرار کردید و اون رو باز نگه داشتید.
ببینید کجا db.open() رو نوشتید اما db.close() رو ننوشتید.
از اون قسمتی هم که علامت زدید نمیشه فهمید مشکل کجاست باید کدهای ارتباط با بانک اطلاعاتی رو بزارید تا بشه فهمید.


public DataTable ShowGridData()
{
string ConnectionString = mvfConnectionString.ConnectionString;
SqlDataAdapter adapter = new SqlDataAdapter();
SqlConnection con = new SqlConnection(ConnectionString);
DataTable dt = new DataTable();

adapter.SelectCommand = new SqlCommand();
adapter.SelectCommand.Connection = con;
adapter.SelectCommand.CommandText = string.Format("select Top 5 NEWID() as sortid, TB_RImage.* from TB_RImage order by 1 ", 0);

con.Open();

adapter.Fill(dt);
con.Close();
return dt;
}
nدوستان میتئنن بگن کجای این دستور ایراد داره

Hajivandian
دوشنبه 03 تیر 1392, 19:02 عصر
سلام،

حالا من کاری ندارم مشکل کجاست ولی نمیدونم چرا هنوز خیلی از برنامه نویس ها این رو متوجه نشدن که مدیریت کانکشن رو آداپتر خودش انجام میده!


public DataTable ShowGridData()
{
string ConnectionString = mvfConnectionString.ConnectionString;
SqlDataAdapter adapter = new SqlDataAdapter();
SqlConnection con = new SqlConnection(ConnectionString);
DataTable dt = new DataTable();

adapter.SelectCommand = new SqlCommand();
adapter.SelectCommand.Connection = con;
adapter.SelectCommand.CommandText = string.Format("select Top 5 NEWID() as sortid, TB_RImage.* from TB_RImage order by 1 ", 0);

con.Open(); // اضافه

adapter.Fill(dt);
con.Close(); // اضافه
return dt;
}

khorsandreza
سه شنبه 04 تیر 1392, 15:32 عصر
سلام،

حالا من کاری ندارم مشکل کجاست ولی نمیدونم چرا هنوز خیلی از برنامه نویس ها این رو متوجه نشدن که مدیریت کانکشن رو آداپتر خودش انجام میده!



با سلام میتونید یک مثال ساده بگید من دقیقا متوجه منظورتان نشدم

General-Xenon
سه شنبه 04 تیر 1392, 16:10 عصر
با سلام میتونید یک مثال ساده بگید من دقیقا متوجه منظورتان نشدم

یعنی وقتی fill میکنید لازم نیست دیگه cn.open() کنید.

khorsandreza
جمعه 07 تیر 1392, 13:05 عصر
سلام،

حالا من کاری ندارم مشکل کجاست ولی نمیدونم چرا هنوز خیلی از برنامه نویس ها این رو متوجه نشدن که مدیریت کانکشن رو آداپتر خودش انجام میده!


public DataTable ShowGridData()
{
string ConnectionString = mvfConnectionString.ConnectionString;
SqlDataAdapter adapter = new SqlDataAdapter();
SqlConnection con = new SqlConnection(ConnectionString);
DataTable dt = new DataTable();

adapter.SelectCommand = new SqlCommand();
adapter.SelectCommand.Connection = con;
adapter.SelectCommand.CommandText = string.Format("select Top 5 NEWID() as sortid, TB_RImage.* from TB_RImage order by 1 ", 0);

con.Open(); // اضافه

adapter.Fill(dt);
con.Close(); // اضافه
return dt;
}


یک سوال
نیاز هست بعد از adapter.Fill(dt); مقدار در dt قرار گرفت adapter آزاد شود؟

Hajivandian
جمعه 07 تیر 1392, 19:09 عصر
اشیائی که متد Dispose رو در خودشون دارند میتونید در بلوک using استفاده کنید که بعد از اتمام کار با اونها به صورت خودکار منابع اشغال شده توسط اونها آزاد بشه. مثال:



public DataTable ShowGridData()
{
string ConnectionString = mvfConnectionString.ConnectionString;

using(SqlDataAdapter adapter = new SqlDataAdapter())
{
SqlConnection con = new SqlConnection(ConnectionString);
DataTable dt = new DataTable();

adapter.SelectCommand = new SqlCommand();
adapter.SelectCommand.Connection = con;
adapter.SelectCommand.CommandText = string.Format("select Top 5 NEWID() as sortid, TB_RImage.* from TB_RImage order by 1 ", 0);

adapter.Fill(dt);
}

return dt;
}

khorsandreza
جمعه 07 تیر 1392, 20:34 عصر
اشیائی که متد Dispose رو در خودشون دارند میتونید در بلوک using استفاده کنید که بعد از اتمام کار با اونها به صورت خودکار منابع اشغال شده توسط اونها آزاد بشه. مثال:



public DataTable ShowGridData()
{
string ConnectionString = mvfConnectionString.ConnectionString;

using(SqlDataAdapter adapter = new SqlDataAdapter())
{
SqlConnection con = new SqlConnection(ConnectionString);
DataTable dt = new DataTable();

adapter.SelectCommand = new SqlCommand();
adapter.SelectCommand.Connection = con;
adapter.SelectCommand.CommandText = string.Format("select Top 5 NEWID() as sortid, TB_RImage.* from TB_RImage order by 1 ", 0);

adapter.Fill(dt);
}

return dt;
}

وقتی return dt; خارج از بلوک است dt را خطا میگیره میشه داخل بلوک قرار داد؟

Hajivandian
جمعه 07 تیر 1392, 23:45 عصر
وقتی return dt; خارج از بلوک است dt را خطا میگیره میشه داخل بلوک قرار داد؟

آره حواسم نبود! البته یه راهشم اینه که تعریف dt رو قبل از بلوک using بزاری.

khorsandreza
شنبه 08 تیر 1392, 00:47 صبح
آره حواسم نبود! البته یه راهشم اینه که تعریف dt رو قبل از بلوک using بزاری.

بینهایت از راهنمایت ممنون مشکل چند روز بود گریبانگیر شده بود اگه بیش از 5 بار صفحه را رفرش میکردم اپلکیش پل پر میشد با دستور شما حل شد
فقط یک مطلب من همین دستور را در یک هاست دیگه استفاده میکنم مشکل نداره این اشکل به سرورها هم بستگی داره؟