Saeed_m_Farid
دوشنبه 31 خرداد 1389, 18:24 عصر
با سلام
بنده تو کدم با اینکه همه Exception ها رو (برای از بین بردن هرگونه شکی) هندل میکنم بازم برنامه با وضع فجیعی Object reference میده و میترکه.
خلاصه کار هم اینه که من از وب سرویس یه دیتاست میگیرم که اون رو در dsTotal می ریزم (قبل تابع تعریف شده)، و بالفرض اگه وب سرویس نتونه جوابی برگردونه اصولاً باید dsTotal مقداردهی نشه (یا null بمونه)؛ که این امر صورت نمی گیره و میام که چک کنم ببینم dsTotal.Tables مقدارش null هست یا نه، یا مثلاً dsTotal.Tables.Count == 0 و یا dsTotal.Tables[0] != null به هرصورت اینجا برنامه منفجر میشه و با وجود اینکه لاگ درون catch رو مینویسه ولی Exception هندل نمیشه و برنامه به دار فانی مراجعت میکنه! چرا نباید Exception هندل بشه اونهم از هر نوعی catch (Exception ex) : میدونم این کار اشتباهه ولی برای نبودن بهانه این کد رو نوشتم و بازم فرقی نکرد؛ این هم کد کامل تابع من :
private void GenTotalNational(DataRow dr, DataRow infoRow, string time)
{
string trce = "StartGetCallList";
try
{
dsTotal = faxService.CallList_GetTotalList(dr["TEL_NO"].ToString(),
false,
int.Parse(dr["DORE_NO"].ToString()),
Properties.Settings.Default.PulsePrice.ToString(),
Properties.Settings.Default.CityCode.ToString());
trce = "CheckResultDataSource";
if ((dsTotal == null) || (dsTotal.Tables.Count > 0))
{
trce = "CheckResultTable";
if (dsTotal.Tables != null)
{
trce = "CheckRecordCount";
if (dsTotal.Tables[0].Rows.Count > 0)
{
trce = "CreateRepTitle";
infoRow["MAIN_TITLE"] = Properties.Settings.Default.ReportTitle;
infoRow["TEL_NO"] = dr["TEL_NO"].ToString();
infoRow["DATE"] = PersianDate();
infoRow["TIME"] = time.Remove(8);
infoRow["DORE"] = dr["DORE_NO"].ToString();
infoRow["TYPE_TITLE"] = Properties.Resources.TotalNational.ToString();
}
else
{
infoRow["NO_RECORDS"] = Properties.Resources.NoRecords.ToString();
}
}
else
{
infoRow["NO_RECORDS"] = Properties.Resources.NoRecords.ToString();
}
trce = "Check&DeleteExtra";
if (dsDetail.Tables[0].Rows.Count > Properties.Settings.Default.MaxRecords)
DeleteExtraRecords(false);
trce = "AddRepRows";
dsTitleInfo.Tables["Info"].Rows.Add(infoRow);
trce = "Reg-dsTitleInfo-Data";
srFaxDetail.RegData(dsTitleInfo);
trce = "Reg-dsTotal-Data";
srFaxDetail.RegData(dsTotal);
trce = "Load-Total.mrt";
srFaxDetail.Load(Application.StartupPath + "\\Reports\\Total.mrt");
trce = "Render";
srFaxDetail.Render(false);
trce = "CreateReportFile";
CreateReportFile(dr, infoRow["DATE"].ToString(), time, "National Total");
trce = "Succeed";
}
else
{
trce = "NoData-1";
AddLog("No data for [National Total] report request for Tel Number: " + dr["TEL_NO"].ToString(), LogType.Warning);
faxService.CallList_SetState(int.Parse(dr["REQ_ID"].ToString()), -3, true);
trce = "NoData-2";
}
}
catch (Exception ex)
{
AddLog("GenTotalNational[" + trce + "]: " + ex.Message, LogType.Error);
}
}
http://sys-developer.persiangig.com/image/UnhandledException.PNG
جزئیات و عکس خطا رو هم با اینکه فکر نمی کنم بدرد بخوره آوردم؛ دوستان و اساتید گرامی اگه نظری دارند محبت کنند دریغ نفرمایند:خجالت:
See the end of this message for details on invoking
just-in-time (JIT) debugging instead of this dialog box.
************** Exception Text **************
System.NullReferenceException: Object reference not set to an instance of an object.
at FaxGenerator.frmMain.GenerateReport(DataRow dr, String Duplicate)
at FaxGenerator.frmMain.OperateFaxRequests(DataTable faxesTable)
at FaxGenerator.frmMain.timerFetch_Tick(Object sender, EventArgs e)
at System.Windows.Forms.Timer.OnTick(EventArgs e)
at System.Windows.Forms.Timer.TimerNativeWindow.WndPr oc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
************** Loaded Assemblies **************
mscorlib
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.42 (RTM.050727-4200)
CodeBase: file:///C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/mscorlib.dll
----------------------------------------
FaxGenerator
Assembly Version: 1.1.3824.31236
Win32 Version: 1.1.3824.31236
CodeBase: file:///C:/Program%20Files/Elka-pt/Fax%20Generator/FaxGenerator.exe
----------------------------------------
System.Windows.Forms
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.42 (RTM.050727-4200)
CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Windows.Forms/2.0.0.0__b77a5c561934e089/System.Windows.Forms.dll
----------------------------------------
System
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.42 (RTM.050727-4200)
CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System/2.0.0.0__b77a5c561934e089/System.dll
----------------------------------------
System.Drawing
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.42 (RTM.050727-4200)
CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Drawing/2.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll
----------------------------------------
System.Data
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.42 (RTM.050727-4200)
CodeBase: file:///C:/WINDOWS/assembly/GAC_32/System.Data/2.0.0.0__b77a5c561934e089/System.Data.dll
----------------------------------------
Stimulsoft.Report
Assembly Version: 2008.1.129.0
Win32 Version: 2008.1.129.0
CodeBase: file:///C:/Program%20Files/Elka-pt/Fax%20Generator/Stimulsoft.Report.DLL
----------------------------------------
System.Xml
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.42 (RTM.050727-4200)
CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Xml/2.0.0.0__b77a5c561934e089/System.Xml.dll
----------------------------------------
Stimulsoft.Base
Assembly Version: 2008.1.129.0
Win32 Version: 2008.1.129.0
CodeBase: file:///C:/Program%20Files/Elka-pt/Fax%20Generator/Stimulsoft.Base.DLL
----------------------------------------
System.Web
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.42 (RTM.050727-4200)
CodeBase: file:///C:/WINDOWS/assembly/GAC_32/System.Web/2.0.0.0__b03f5f7f11d50a3a/System.Web.dll
----------------------------------------
Stimulsoft.Controls
Assembly Version: 2008.1.129.0
Win32 Version: 2008.1.129.0
CodeBase: file:///C:/Program%20Files/Elka-pt/Fax%20Generator/Stimulsoft.Controls.DLL
----------------------------------------
System.Design
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.42 (RTM.050727-4200)
CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Design/2.0.0.0__b03f5f7f11d50a3a/System.Design.dll
----------------------------------------
Stimulsoft.Compression
Assembly Version: 2008.1.129.0
Win32 Version: 2008.1.129.0
CodeBase: file:///C:/Program%20Files/Elka-pt/Fax%20Generator/Stimulsoft.Compression.DLL
----------------------------------------
System.Configuration
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.42 (RTM.050727-4200)
CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Configuration/2.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll
----------------------------------------
System.Web.Services
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.42 (RTM.050727-4200)
CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Web.Services/2.0.0.0__b03f5f7f11d50a3a/System.Web.Services.dll
----------------------------------------
g_em1gma
Assembly Version: 1.1.3824.31236
Win32 Version: 2.0.50727.42 (RTM.050727-4200)
CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System/2.0.0.0__b77a5c561934e089/System.dll
----------------------------------------
System.Transactions
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.42 (RTM.050727-4200)
CodeBase: file:///C:/WINDOWS/assembly/GAC_32/System.Transactions/2.0.0.0__b77a5c561934e089/System.Transactions.dll
----------------------------------------
System.EnterpriseServices
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.42 (RTM.050727-4200)
CodeBase: file:///C:/WINDOWS/assembly/GAC_32/System.EnterpriseServices/2.0.0.0__b03f5f7f11d50a3a/System.EnterpriseServices.dll
----------------------------------------
************** JIT Debugging **************
To enable just-in-time (JIT) debugging, the .config file for this
application or computer (machine.config) must have the
jitDebugging value set in the system.windows.forms section.
The application must also be compiled with debugging
enabled.
For example:
<configuration>
<system.windows.forms jitDebugging="true" />
</configuration>
When JIT debugging is enabled, any unhandled exception
will be sent to the JIT debugger registered on the computer
rather than be handled by this dialog box.
بنده تو کدم با اینکه همه Exception ها رو (برای از بین بردن هرگونه شکی) هندل میکنم بازم برنامه با وضع فجیعی Object reference میده و میترکه.
خلاصه کار هم اینه که من از وب سرویس یه دیتاست میگیرم که اون رو در dsTotal می ریزم (قبل تابع تعریف شده)، و بالفرض اگه وب سرویس نتونه جوابی برگردونه اصولاً باید dsTotal مقداردهی نشه (یا null بمونه)؛ که این امر صورت نمی گیره و میام که چک کنم ببینم dsTotal.Tables مقدارش null هست یا نه، یا مثلاً dsTotal.Tables.Count == 0 و یا dsTotal.Tables[0] != null به هرصورت اینجا برنامه منفجر میشه و با وجود اینکه لاگ درون catch رو مینویسه ولی Exception هندل نمیشه و برنامه به دار فانی مراجعت میکنه! چرا نباید Exception هندل بشه اونهم از هر نوعی catch (Exception ex) : میدونم این کار اشتباهه ولی برای نبودن بهانه این کد رو نوشتم و بازم فرقی نکرد؛ این هم کد کامل تابع من :
private void GenTotalNational(DataRow dr, DataRow infoRow, string time)
{
string trce = "StartGetCallList";
try
{
dsTotal = faxService.CallList_GetTotalList(dr["TEL_NO"].ToString(),
false,
int.Parse(dr["DORE_NO"].ToString()),
Properties.Settings.Default.PulsePrice.ToString(),
Properties.Settings.Default.CityCode.ToString());
trce = "CheckResultDataSource";
if ((dsTotal == null) || (dsTotal.Tables.Count > 0))
{
trce = "CheckResultTable";
if (dsTotal.Tables != null)
{
trce = "CheckRecordCount";
if (dsTotal.Tables[0].Rows.Count > 0)
{
trce = "CreateRepTitle";
infoRow["MAIN_TITLE"] = Properties.Settings.Default.ReportTitle;
infoRow["TEL_NO"] = dr["TEL_NO"].ToString();
infoRow["DATE"] = PersianDate();
infoRow["TIME"] = time.Remove(8);
infoRow["DORE"] = dr["DORE_NO"].ToString();
infoRow["TYPE_TITLE"] = Properties.Resources.TotalNational.ToString();
}
else
{
infoRow["NO_RECORDS"] = Properties.Resources.NoRecords.ToString();
}
}
else
{
infoRow["NO_RECORDS"] = Properties.Resources.NoRecords.ToString();
}
trce = "Check&DeleteExtra";
if (dsDetail.Tables[0].Rows.Count > Properties.Settings.Default.MaxRecords)
DeleteExtraRecords(false);
trce = "AddRepRows";
dsTitleInfo.Tables["Info"].Rows.Add(infoRow);
trce = "Reg-dsTitleInfo-Data";
srFaxDetail.RegData(dsTitleInfo);
trce = "Reg-dsTotal-Data";
srFaxDetail.RegData(dsTotal);
trce = "Load-Total.mrt";
srFaxDetail.Load(Application.StartupPath + "\\Reports\\Total.mrt");
trce = "Render";
srFaxDetail.Render(false);
trce = "CreateReportFile";
CreateReportFile(dr, infoRow["DATE"].ToString(), time, "National Total");
trce = "Succeed";
}
else
{
trce = "NoData-1";
AddLog("No data for [National Total] report request for Tel Number: " + dr["TEL_NO"].ToString(), LogType.Warning);
faxService.CallList_SetState(int.Parse(dr["REQ_ID"].ToString()), -3, true);
trce = "NoData-2";
}
}
catch (Exception ex)
{
AddLog("GenTotalNational[" + trce + "]: " + ex.Message, LogType.Error);
}
}
http://sys-developer.persiangig.com/image/UnhandledException.PNG
جزئیات و عکس خطا رو هم با اینکه فکر نمی کنم بدرد بخوره آوردم؛ دوستان و اساتید گرامی اگه نظری دارند محبت کنند دریغ نفرمایند:خجالت:
See the end of this message for details on invoking
just-in-time (JIT) debugging instead of this dialog box.
************** Exception Text **************
System.NullReferenceException: Object reference not set to an instance of an object.
at FaxGenerator.frmMain.GenerateReport(DataRow dr, String Duplicate)
at FaxGenerator.frmMain.OperateFaxRequests(DataTable faxesTable)
at FaxGenerator.frmMain.timerFetch_Tick(Object sender, EventArgs e)
at System.Windows.Forms.Timer.OnTick(EventArgs e)
at System.Windows.Forms.Timer.TimerNativeWindow.WndPr oc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
************** Loaded Assemblies **************
mscorlib
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.42 (RTM.050727-4200)
CodeBase: file:///C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/mscorlib.dll
----------------------------------------
FaxGenerator
Assembly Version: 1.1.3824.31236
Win32 Version: 1.1.3824.31236
CodeBase: file:///C:/Program%20Files/Elka-pt/Fax%20Generator/FaxGenerator.exe
----------------------------------------
System.Windows.Forms
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.42 (RTM.050727-4200)
CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Windows.Forms/2.0.0.0__b77a5c561934e089/System.Windows.Forms.dll
----------------------------------------
System
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.42 (RTM.050727-4200)
CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System/2.0.0.0__b77a5c561934e089/System.dll
----------------------------------------
System.Drawing
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.42 (RTM.050727-4200)
CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Drawing/2.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll
----------------------------------------
System.Data
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.42 (RTM.050727-4200)
CodeBase: file:///C:/WINDOWS/assembly/GAC_32/System.Data/2.0.0.0__b77a5c561934e089/System.Data.dll
----------------------------------------
Stimulsoft.Report
Assembly Version: 2008.1.129.0
Win32 Version: 2008.1.129.0
CodeBase: file:///C:/Program%20Files/Elka-pt/Fax%20Generator/Stimulsoft.Report.DLL
----------------------------------------
System.Xml
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.42 (RTM.050727-4200)
CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Xml/2.0.0.0__b77a5c561934e089/System.Xml.dll
----------------------------------------
Stimulsoft.Base
Assembly Version: 2008.1.129.0
Win32 Version: 2008.1.129.0
CodeBase: file:///C:/Program%20Files/Elka-pt/Fax%20Generator/Stimulsoft.Base.DLL
----------------------------------------
System.Web
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.42 (RTM.050727-4200)
CodeBase: file:///C:/WINDOWS/assembly/GAC_32/System.Web/2.0.0.0__b03f5f7f11d50a3a/System.Web.dll
----------------------------------------
Stimulsoft.Controls
Assembly Version: 2008.1.129.0
Win32 Version: 2008.1.129.0
CodeBase: file:///C:/Program%20Files/Elka-pt/Fax%20Generator/Stimulsoft.Controls.DLL
----------------------------------------
System.Design
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.42 (RTM.050727-4200)
CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Design/2.0.0.0__b03f5f7f11d50a3a/System.Design.dll
----------------------------------------
Stimulsoft.Compression
Assembly Version: 2008.1.129.0
Win32 Version: 2008.1.129.0
CodeBase: file:///C:/Program%20Files/Elka-pt/Fax%20Generator/Stimulsoft.Compression.DLL
----------------------------------------
System.Configuration
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.42 (RTM.050727-4200)
CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Configuration/2.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll
----------------------------------------
System.Web.Services
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.42 (RTM.050727-4200)
CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Web.Services/2.0.0.0__b03f5f7f11d50a3a/System.Web.Services.dll
----------------------------------------
g_em1gma
Assembly Version: 1.1.3824.31236
Win32 Version: 2.0.50727.42 (RTM.050727-4200)
CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System/2.0.0.0__b77a5c561934e089/System.dll
----------------------------------------
System.Transactions
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.42 (RTM.050727-4200)
CodeBase: file:///C:/WINDOWS/assembly/GAC_32/System.Transactions/2.0.0.0__b77a5c561934e089/System.Transactions.dll
----------------------------------------
System.EnterpriseServices
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.42 (RTM.050727-4200)
CodeBase: file:///C:/WINDOWS/assembly/GAC_32/System.EnterpriseServices/2.0.0.0__b03f5f7f11d50a3a/System.EnterpriseServices.dll
----------------------------------------
************** JIT Debugging **************
To enable just-in-time (JIT) debugging, the .config file for this
application or computer (machine.config) must have the
jitDebugging value set in the system.windows.forms section.
The application must also be compiled with debugging
enabled.
For example:
<configuration>
<system.windows.forms jitDebugging="true" />
</configuration>
When JIT debugging is enabled, any unhandled exception
will be sent to the JIT debugger registered on the computer
rather than be handled by this dialog box.