เกิด Error : Exception was unhandled ตรงบรรทัด throw อ่ะครับ วานผู้รู้ดูให้หน่อย
ถ้าจะใช้ Thrown น่าเขียนแบบนี้มากกว่า
Sample 1
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.OleDb;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace Search_Form
{
public partial class Search_Form : Form
{
public Search_Form()
{
InitializeComponent();
}
private DataSet dsDataSet;
private void Search_Form_Load(object sender, EventArgs e)
{
}
private void btnSearch_Click(object sender, EventArgs e)
{
/*- - - - - - - - - - - - - - - - - -เชื่อมต่อฐานข้อมูล- - - - - - - - - - - - - - - - - */
string conStr = "Provider=Microsoft.Ace.OleDb.12.0;" +
@"Data Source=C:\Users\Plugfai\Documents\Visual Studio 2008\Projects\Bus_Aplication\Data\Bus Transport of Bangkok.accdb";
OleDbConnection conn = new OleDbConnection(conStr);
conn.Open();
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
dsDataSet = new DataSet();
OleDbCommand cmd;
OleDbDataAdapter adapter;
string sql;
string BN = txtNum.Text;
if (BN == "")
{
MessageBox.Show("กรุณากรอกเลขสายค่ะ", "error");
}
else
{
sql = "SELECT * FROM Bus_Lines WHERE Bus_Number=" + "'" + BN + "'";
cmd = new OleDbCommand(sql, conn);
adapter = new OleDbDataAdapter(cmd);
adapter.Fill(dsDataSet, "Bus");
try
{
If dsDataSet.Tables["Bus"].Rows.Count=0 Then throw new Exception("ไม่พบข้อมูล");
txtShow.Text = dsDataSet.Tables["Bus"].Rows[0]["Ramble"].ToString();
}
catch ex As Exception
{
Messagebox.Show(ex.Message);
}
}
//DataView dv = new DataView(dsDataSet.Tables["Bus"]);
// dv.RowFilter = "Bus_Number = '1'";
// txtShow.DataBindings.Add("Text", dv, "Bus.Ramble");
conn.Close();
}
}
}
Date :
2011-03-22 13:39:39
By :
หางอึ่ง
หรืออาจไม่ต้องใช้ Throw ก็ได้เดี๋ยวโปรแกรมก็เหวี่ยงมาให้เอง เพราะอยู่ใน Try Box
Sample 1
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.OleDb;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace Search_Form
{
public partial class Search_Form : Form
{
public Search_Form()
{
InitializeComponent();
}
private DataSet dsDataSet;
private void Search_Form_Load(object sender, EventArgs e)
{
}
private void btnSearch_Click(object sender, EventArgs e)
{
/*- - - - - - - - - - - - - - - - - -เชื่อมต่อฐานข้อมูล- - - - - - - - - - - - - - - - - */
string conStr = "Provider=Microsoft.Ace.OleDb.12.0;" +
@"Data Source=C:\Users\Plugfai\Documents\Visual Studio 2008\Projects\Bus_Aplication\Data\Bus Transport of Bangkok.accdb";
OleDbConnection conn = new OleDbConnection(conStr);
conn.Open();
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
dsDataSet = new DataSet();
OleDbCommand cmd;
OleDbDataAdapter adapter;
string sql;
string BN = txtNum.Text;
if (BN == "")
{
MessageBox.Show("กรุณากรอกเลขสายค่ะ", "error");
}
else
{
sql = "SELECT * FROM Bus_Lines WHERE Bus_Number=" + "'" + BN + "'";
cmd = new OleDbCommand(sql, conn);
adapter = new OleDbDataAdapter(cmd);
adapter.Fill(dsDataSet, "Bus");
try
{
// If dsDataSet.Tables["Bus"].Rows.Count=0 Then throw new Exception("ไม่พบข้อมูล");
txtShow.Text = dsDataSet.Tables["Bus"].Rows[0]["Ramble"].ToString();
}
catch ex As Exception
{
Messagebox.Show(ex.Message);
}
}
//DataView dv = new DataView(dsDataSet.Tables["Bus"]);
// dv.RowFilter = "Bus_Number = '1'";
// txtShow.DataBindings.Add("Text", dv, "Bus.Ramble");
conn.Close();
}
}
}
Date :
2011-03-22 13:40:59
By :
หางอึ่ง
คือ ความตั้งใจ จะใช้ Throw แสดงข้อความแจ้งเตือน อ่ะครับ
ยังไง ก็คงต้องใช้ อ่ะครับ
ถ้ายังไง ช่วยบอกหน่อยได้ไหมว่า
ทำไม แบบที่ผมเขียนจึงไม่ถูกต้อง เพราะอะไร
ผมจะได้เข้าใจตัวไวยกรณ์ ของมันได้ถูกต้องอ่ะครับ !
ประวัติการแก้ไข 2011-03-22 13:51:08
Date :
2011-03-22 13:50:12
By :
plugantz
ผมเอาไอเดีย ของคุณหางลิ่ง มาปรับปรุง นะครับ
โดย บรรทัด try กับ catch ผมเปลี่ยนเป็นคำสั่งดังนี้
Code (C#)
int Count_Data = dsDataSet.Tables["Bus"].Rows.Count;
if (Count_Data == 0)
MessageBox.Show("ไม่พบข้อมูล");
else
txtShow.Text = dsDataSet.Tables["Bus"].Rows[0]["Ramble"].ToString();
อาจจะดูลูกทุ่งไปหน่อย ถ้าไงใครมีวิธี ไหนที่ดีกว่าก็แนะนำให้ผมที่ครับ !
Date :
2011-03-22 13:58:54
By :
plugantz
Exception was unhandled
เกิดจากการ Throw ที่ไม่มีตัวรับ (Catch)
อีกอย่าง Throw มิใช่ตัวแสดงข้อความนะครับ ตัวแสดงข้อความคือ MessageBox
เราใช้ Throw เพื่อทำให้ระบบเกิดข้อผิดพลาด และเมื่อจะใช้ Throw จำไว้ว่าต้องอยู่ใน Try Box
ไม่ค่อยถนัดภาษา C ขอเขียนเป็น vb
Try
If นิพจน์ตรวจสอบข้อผิดพลาด Then Throw New Exception("ข้อความแสดงความผิดพลาด")
....
....
Catch ex As Exception
Messagebox.Show(ex.Message)
End Try
Date :
2011-03-22 14:01:08
By :
หางอึ่ง
ขอบคุณครับ !
แบบนี้ เข้าใจขึ้นเยอะเลย แฮ่ๆ
Date :
2011-03-22 14:04:16
By :
plugantz
หรือจะเขียนแบบนี้ก็ไม่ผิด
Sample Throw
Private Sub btnSearch_Click(object sender, EventArgs e)
Try
......
Me.TestThrow()
......
Catch ex As Exception
Messagebox.Show(ex)
End Try
End
Private Sub TestThrow()
....
If นิพจน์ตรวจสอบความผิดพลาด Then Throw New Exception("ข้อความ")
....
End Sub
อย่างนี้ก็ยังได้ ไม่ว่ากัน
Sample Throw
Private Sub btnSearch_Click(object sender, EventArgs e)
Try
......
Me.TestThrow()
.......
Catch ex As Exception
Messagebox.Show(ex)
End Try
End
Private Sub TestThrow()
Try
....
If นิพจน์ตรวจสอบความผิดพลาด Then Throw New Exception("ข้อความ")
....
Catch ex As Exception
Throw ex
End Try
End Sub
Date :
2011-03-22 14:12:10
By :
หางอึ่ง
Code (C#)
try
{
txtShow.Text = dsDataSet.Tables["Bus"].Rows[0]["Ramble"].ToString();
}
catch
{
MessageBox.Show("ไม่พบข้อมูล");
}
แปลง เป็น C# ก็ตามนี้นะครับ ^ ^
Date :
2011-03-22 15:11:00
By :
plugantz
Load balance : Server 02