【问题标题】:Try catch never enters catch blockTry catch 永远不会进入 catch 块
【发布时间】:2015-05-06 09:20:35
【问题描述】:

下面代码的问题是我从来没有看到我的catch 代码执行。如果我的 id 不存在,它会显示一个空的数据网格。出了什么问题?

private void btnSearch_Click(object sender, EventArgs e)
{
    try
    {
        this.Cursor = Cursors.WaitCursor;
        SqlConnectie vandaag = new SqlConnectie();
        vandaag.Connection();
        SqlDataAdapter sda = new SqlDataAdapter("select ID, VERSIE, SB, NAAM, M_DATUM, V_DATUM from RE1 where ID=" + tbRecept.Text, SqlConnectie.conn);
        DataTable dt = new DataTable();
        sda.Fill(dt);
        dgvTemp.DataSource = dt;
        SqlConnectie.conn.Close();
        this.Cursor = Cursors.Default;
    }

    catch
    {
        MessageBox.Show("ID doesn't exist");
    }
}

【问题讨论】:

  • 从sql查询中接收不到结果不是错误,try catch用于捕获抛出的错误
  • 你没有定义,你想捕捉什么。例如:catch (Exception e) 但这不会导致您的“问题”。查看蒂姆的答案
  • @JeremyC。那我应该用什么?
  • Tim Schmelter 在他的回答中所说的,在这种情况下根本不要使用 try catch,或者可能只是把它留在那里并让消息框显示错误代码(以防万一出现问题将来,比如数据库不可用)

标签: sql try-catch


【解决方案1】:

如果数据库没有返回任何行,为什么会出现异常?得到一个空的结果集是完全有效的,dataadapter 将返回一个空的DataTable

你可以检查一下:

DataTable dt = new DataTable();
sda.Fill(dt);
dgvTemp.DataSource = dt;
if(dt.Rows.Count == 0)
    MessageBox.Show("ID doesn't exist");

【讨论】:

    猜你喜欢
    • 2017-12-31
    • 1970-01-01
    • 1970-01-01
    • 2016-05-21
    • 1970-01-01
    • 2019-12-04
    • 2018-03-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多