
例外截圖,錯誤概率發生的概率有5%左右,資料恢復后也無法復現無法除錯;
錯誤提示 值沒有落在期待的范圍內
value does not fall within the expected range;
代碼如下:
private void button1_Click(object sender, EventArgs e)
{
try
{ if (MessageBox.Show("是否確認當前任務!", "提示", 4, 32, 0) != 7)
{ string text = this.labHWID.get_Text(); //貨位id
string text2 = this.labspid.get_Text(); //商品id
string text3 = this.labphid.get_Text(); //批號id
if (this.g_dsPickData.get_Tables().get_Item(0).get_Rows().get_Count() > 0)
{
string text4 = this.g_dsPickData.get_Tables().get_Item(0).get_Rows().get_Item(0).get_Item("SF_ZY").ToString();//是否中藥 默認0
}
string text5 = this.lbSum.get_Text(); //揀貨總數
Cursor.set_Current(Cursors.get_WaitCursor());
Service service = new Service();
string strp_in = string.Concat(new string[] //調取揀貨確認程序 4 個引數 批揀單號 貨位 批號 周轉箱
{
"<CKJHQR><", this.m_strDJBH_RW, "><", text, "><", text3, "><ZZX>"
});
DataSet dataSet = new DataSet(); //資料庫
dataSet = service.WebService.P_PDA_CUROR(strp_in);//資料庫傳值
Cursor.set_Current(Cursors.get_Default()); //text6 資料庫回傳值 0 揀貨未完成 1揀貨全部完成 -1 例外錯誤
string text6 = dataSet.get_Tables().get_Item(0).get_Rows().get_Item(0).get_Item(0).ToString();
if (text6 == "0") ///揀貨未完成 不是最后一個品揀貨確認
{
if (this.g_dsPickData.get_Tables().get_Item(0).get_Rows().get_Count() > 0)
{
for (int i = this.g_dsPickData.get_Tables().get_Item(0).get_Rows().get_Count() - 1; i >= 0; i--)
{
if (this.g_dsPickData.get_Tables().get_Item(0).get_Rows().get_Item(i).get_Item("hwid").ToString() == text && this.g_dsPickData.get_Tables().get_Item(0).get_Rows().get_Item(i).get_Item("phid").ToString() == text3)
{
this.g_dsPickData.get_Tables().get_Item(0).get_Rows().RemoveAt(i);
}
}
this.Clear(); //清除顯示
this.mShowData(this.g_dsPickData.get_Tables().get_Item(0).get_Rows().get_Item(0).get_Item("HWID").ToString()); //貨位id
this.m_strNo = this.g_dsPickData.get_Tables().get_Item(0).get_Rows().get_Count().ToString();
this.lbSumNo.set_Text(this.m_strNo + "/" + this.m_strSum); //揀貨總數
}
}
else if (text6 == "1") //揀貨全部完成
{ MessageBox.Show("全部確認完成");
this.blClose = false; base.Close();
string text7 = dataSet.get_Tables().get_Item(0).get_Rows().get_Item(0).get_Item("INFO").ToString();
if (text7 == "1") //info 回傳值1 彈出復核臺提示框
{ FrmShowZCHW frmShowZCHW = new FrmShowZCHW(this.m_strDJBH_RW); //彈出核臺框
frmShowZCHW.ShowDialog(); } }
else if (text6 == "-1") //系統報錯,回傳資料庫ora報錯說明
{
string text8 = dataSet.get_Tables().get_Item(0).get_Rows().get_Item(0).get_Item("INFO").ToString();
MessageBox.Show(text8); //顯示報錯資訊
}
else
{
MessageBox.Show("資料更新失敗:" + text6, "資料庫錯誤!"); //資料庫錯誤!
}
}
}
catch (Exception ex) //例外情況 拋出資料庫錯誤 1:回傳值不在范圍內 2:位置0 3:沒資料
{
Cursor.set_Current(Cursors.get_Default());
MessageBox.Show(ex.get_Message().ToString(), "資料庫錯誤!"); //回傳值不在期待的范圍內
}
}
uj5u.com熱心網友回復:
先用檔案記錄日志的辦法定位到錯誤吧,偶發的錯誤最難搞了。隔幾行寫個日志,出錯了之后看看日志記錄的最后位置,位置下面就是錯誤了。
uj5u.com熱心網友回復:
例外資訊記錄的太少了。你需要記錄這三個。
ex.Message
ex.InnerException.Message
ex.StackTrace
我們才能分析
uj5u.com熱心網友回復:
你先寫日志找出報錯的規律,比如說每執行十次時,第十次一定報錯,程式是死的一定會有規律的,你可以把你報錯的那幾次的輸出引數除錯一下,執行一百次都正常,可能后面再執行一次就有問題,這有可能是引數的問題uj5u.com熱心網友回復:
感謝各位的回復,提供解決問題的思路和方法。轉載請註明出處,本文鏈接:https://www.uj5u.com/net/77798.html
標籤:C#
上一篇:一個asp.net的查詢問題
下一篇:C#基礎知識
