PDA

View Full Version : سوال: مشکل 'System.StackOverflowException'



NasimBamdad
سه شنبه 04 مهر 1391, 14:21 عصر
سلام و خسته نباشید .

مشکلی دارم در مورد StackOverFlow

قضیه از این قراره که من برای نرم افزار گزارش گیریم از StimulReport استفاده می کنم . ،

چندین فایل گزارش گیری دارم و همه شان بدون مشکل و سالم هستند . اما یکی از فایلهام زمانی که فراخوانیش می کنم ( فایل های گزارش ساخته شده با StimulReport) یک Error میده با متن زیر

لیــــنک عکس
(http://1.3.3.img98.net/out.php/i471992_stack.jpg)

اینم مجموعه کد های هست که برای این فایل گزارشم لود میشه


SqlConnection cnn72 = new SqlConnection(ConfigurationManager.AppSettings["ConnectionString"]);
SqlCommand cmd72 = new SqlCommand();
cmd72.Connection = cnn72;
cnn72.Open();
cmd72.CommandText = "Delete From other_usage WHERE other_id ='4' OR other_id = '6' OR other_id = '10' OR other_id = '11' AND patientid ='" + textBox1.Text + "'";
cmd72.ExecuteNonQuery();
cnn72.Close();


SqlConnection cnn074 = new SqlConnection(ConfigurationManager.AppSettings["ConnectionString"]);
SqlCommand cmd074 = new SqlCommand();
cmd074.Connection = cnn074;
cnn074.Open();
cmd074.CommandText = "Insert INTO other_usage (patientid,other_id,numberz) VALUES (@patientid,@other_id,@numberz)";
cmd074.Parameters.AddWithValue("@patientid", textBox1.Text);
cmd074.Parameters.AddWithValue("@other_id", 4);
cmd074.Parameters.AddWithValue("@numberz", 1);
cmd074.ExecuteNonQuery();
cnn074.Close();

SqlConnection cnn73 = new SqlConnection(ConfigurationManager.AppSettings["ConnectionString"]);
SqlCommand cmd73 = new SqlCommand();
cmd73.Connection = cnn73;
cnn73.Open();
cmd73.CommandText = "Insert INTO other_usage (patientid,other_id,numberz) VALUES (@patientid,@other_id,@numberz)";
cmd73.Parameters.AddWithValue("@patientid", textBox1.Text);
cmd73.Parameters.AddWithValue("@other_id", 6);
cmd73.Parameters.AddWithValue("@numberz", 1);
cmd73.ExecuteNonQuery();
cnn73.Close();

SqlConnection cnn74 = new SqlConnection(ConfigurationManager.AppSettings["ConnectionString"]);
SqlCommand cmd74 = new SqlCommand();
cmd74.Connection = cnn74;
cnn74.Open();
cmd74.CommandText = "Insert INTO other_usage (patientid,other_id,numberz) VALUES (@patientid,@other_id,@numberz)";
cmd74.Parameters.AddWithValue("@patientid", textBox1.Text);
cmd74.Parameters.AddWithValue("@other_id", 10);
cmd74.Parameters.AddWithValue("@numberz", 1);
cmd74.ExecuteNonQuery();
cnn74.Close();

SqlConnection cnn174 = new SqlConnection(ConfigurationManager.AppSettings["ConnectionString"]);
SqlCommand cmd174 = new SqlCommand();
cmd174.Connection = cnn174;
cnn174.Open();
cmd174.CommandText = "Insert INTO other_usage (patientid,other_id,numberz) VALUES (@patientid,@other_id,@numberz)";
cmd174.Parameters.AddWithValue("@patientid", textBox1.Text);
cmd174.Parameters.AddWithValue("@other_id", 11);
cmd174.Parameters.AddWithValue("@numberz", 1);
cmd174.ExecuteNonQuery();
cnn174.Close();

SqlConnection cnn16 = new SqlConnection(ConfigurationManager.AppSettings["ConnectionString"]);
SqlCommand cmd16 = new SqlCommand();
cmd16.Connection = cnn16;
cnn16.Open();
cmd16.CommandText = "Delete From invoice_other where patientid = '" + textBox1.Text + "'";
cmd16.ExecuteNonQuery();
cnn16.Close();

SqlConnection cnn79 = new SqlConnection(ConfigurationManager.AppSettings["ConnectionString"]);
SqlCommand cmd79 = new SqlCommand();
cmd79.Connection = cnn79;
cnn79.Open();
cmd79.CommandText = "INSERT INTO invoice_other(patientid,other_id,cost_azad,cost_bi me,cost_bimar) SELECT patientid,other_id,(numberz * cost_azad_meli),(numberz * cost_meli),(numberz * cost_azad_meli - numberz * cost_meli) FROM other_type,other_usage WHERE other_usage.other_id = other_type.id AND patientid = @patientid";
cmd79.Parameters.AddWithValue("@patientid", textBox1.Text);
cmd79.ExecuteNonQuery();
cnn79.Close();

SqlConnection cnn17 = new SqlConnection(ConfigurationManager.AppSettings["ConnectionString"]);
SqlCommand cmd17 = new SqlCommand();
cmd17.Connection = cnn17;
cnn17.Open();
cmd17.CommandText = "Delete From invoice_lenz where patientid = '" + textBox1.Text + "'";
cmd17.ExecuteNonQuery();
cnn17.Close();

SqlConnection cnn78 = new SqlConnection(ConfigurationManager.AppSettings["ConnectionString"]);
SqlCommand cmd78 = new SqlCommand();
cmd78.Connection = cnn78;
cnn78.Open();
cmd78.CommandText = "INSERT INTO invoice_lenz (patientid,lenz_id,cost_azad,cost_bime,cost_mokame l,cost_bimar) SELECT dbo.lenz_usage.patientid,dbo.lenz_type.id,(numberz * dbo.lenz_type.cost_azad),0,0,0 FROM dbo.lenz_usage INNER JOIN dbo.lenz_type ON dbo.lenz_usage.lenz_id = dbo.lenz_type.id WHERE patientid = @patientid";
cmd78.Parameters.AddWithValue("@patientid", textBox1.Text);
cmd78.ExecuteNonQuery();
cnn78.Close();

string path = "Reports\\invoice_meli.mrt";
stiReport1.Load(path);
stiReport1.Dictionary.DataSources["DataSource2"].Parameters[0].Value = textBox1.Text;
stiReport1.Dictionary.DataSources["Lenz"].Parameters[0].Value = textBox1.Text;
stiReport1.Dictionary.DataSources["phaco"].Parameters[0].Value = textBox1.Text;
stiReport1.Dictionary.DataSources["Navar"].Parameters[0].Value = textBox1.Text;
stiReport1.Dictionary.DataSources["Visit"].Parameters[0].Value = textBox1.Text;
stiReport1.Dictionary.DataSources["daroo"].Parameters[0].Value = textBox1.Text;
stiReport1.Dictionary.DataSources["tajhiz"].Parameters[0].Value = textBox1.Text;
stiReport1.Dictionary.DataSources["micro"].Parameters[0].Value = textBox1.Text;
stiReport1.Dictionary.DataSources["profile"].Parameters[0].Value = textBox1.Text;
stiReport1.Dictionary.DataSources["takht"].Parameters[0].Value = textBox1.Text;
stiReport1.Dictionary.DataSources["khadamat"].Parameters[0].Value = textBox1.Text;
stiReport1.Dictionary.DataSources["Service"].Parameters[0].Value = textBox1.Text;
stiReport1.Dictionary.DataSources["Laser"].Parameters[0].Value = textBox1.Text;

stiReport1.Show();
string datez = PersianDate.Now.ToShortDateString();
string[] str = datez.Split('/');
for (int i = 0; i < str.Length; i++) ;
string day = str[0];
string month = str[1];
string year = str[2];
/////////////
TimeSpan z = DateTime.Now.TimeOfDay;
string mm = Convert.ToString(z);
string hour = mm.Substring(0, 2);
string minute = mm.Substring(3, 2);
string second = mm.Substring(6, 2);
stiReport1.SaveDocument(@"\\Pc2\e\Saved_Reports\\" + textBox1.Text + "-" + year + "-" + month + "-" + day + "-" + hour + "-" + minute + "-" + second + ".mdc");


همین کد ها برای گزارشات دیگر ( با کمی تغییر در کوری ها ) قرار دارد و مشکلی نیست .

نمی دانم چرا این مشکل بوجود میاد . در ضمن زمانی که با خود نرم افزار گزارش ساز ( StimulReport ) چک می کنم ، فایل گزارش مشکلی نداره .



ممنون میشم کمک کنید
///////////////////

لازم به ذکر هست که خدمت مدیران عزیز ، زیاد زیاد سرچ کردم ، در گوگل گشتم ، سایت های خارجی و فارسی رو گشتم ، سایت های رقبا دوستان و .............. چیزی پیدا نکردم.

بعد اقدام به زدن تاپیک کردم . خواهشن تاپیک رو پاک نکنید .

اگه پاک کردید یه PM بزنید و دلیل رو بفرمایید اگه زحمتی نیست .

با کمال احترام

harani
سه شنبه 04 مهر 1391, 14:40 عصر
خطاهایی که با رنگ سبز نشان داده میشود زمانی رخ میدهند که برنامه نمیداند باید کد را از کجا بخواند به عنوان مثال یک دکمه مثلاً به اسم btnGo_to_home ساختید بعد تو رویداد کلیک آن مینویسید this.Close();//a
سپس میای تو رویداد closing فرمت مینویسی btnGo_to_home_Click(sender,e);//a (یعنی هر کدی که تو رویداد کلیلک باتن نوشته شده) در هنگام بسته شده فرم برنامه نمداند که عمل بستن را از کجا بخواند . مشکلتان شامل اینجور کاراس باید بگردید مشکلو پیدا کنید .

NasimBamdad
سه شنبه 04 مهر 1391, 15:14 عصر
والا تابعی رو لود نکردم و یا از این کار ها .

دقیقا همین کد ها برای گزارشات یکسان دیگری هم هستند ، حالا کمی در کوری هاشون تغییر داده شده . ولی فرمت همون هست . اما این اررور رو میده .

نمی دونم از کجا باید درستش کنم .

harani
سه شنبه 04 مهر 1391, 15:40 عصر
دوست عزیز این خطا همانطور گفتم زمانی است که برنامه نمیداند که از کجا باید کد رو اجرا کنه جایی از برنامه داره دور باطل میزنه. برای استاد mafaman2003 (http://barnamenevis.org/member.php?71297-mafaman2003) یک پیغام بزنید که به تایپیکتون نگاه بندازن .جوابای ایشون همیشه کامله .
به جناب the king (http://barnamenevis.org/member.php?259237-the-king) هم یه پست برنید یادمه که یه همچین خطایی رو داشتم ایشون تفسیر خوبی کردن .

hakim22
سه شنبه 04 مهر 1391, 17:02 عصر
این خطا زمانی پیش میاد که شما از حافظه Stack بیش از حد استفاده کرده باشید و ظرفیت آن پر شده باشد.
این حافظه اشاره گرهای هر کلاس رو ذخیره میکنه

در اصل میشه گفت وقتی یک کلاس به صورت بازگشتی خودش رو فراخونی میکنه بیشترین زمانی است که این خطا روی میده.
مشکل رفع خطا اینه که برنامه به خودی خودش اجرا میشه
اما وقتی حلقه بیش از حد تکرار بشه خطا ظاهر میشه . به همین دلیل پیدا کردنش کمی مشکله
من از روش حذفی استفاده میکنم
در روش حذفی شما با کامنت کردن بخشهایی از کد و ساده سازی سعی میکنید برنامه رو اجرا کنید. و ...

البته اگر با تکنیک های خطایابی حرفه ای آشنا باشید راهها و نرم افزارهای کمکی زیادی هست که بدرد میخوره.

NasimBamdad
چهارشنبه 05 مهر 1391, 10:43 صبح
مرسی از همه عزیزان که کمک کردند من چیز های بیشتری ییاد بگیرم

مشکل از این بود که یک فیلد در خودش ضرب میشد در برنامه گزارش ساز Stimul Report . و مشکل رو حلش کردم . ممنون


در کل نتیجه تاپیک این شد که مواردی مثل حلقه تکرار یا یک فعالیت بی نهایت باعث این اررور ها میشه