GridView错误处理

时间:2014-03-13 20:34:35

标签: asp.net sql gridview error-handling sql-server-2012

我正在为我工​​作场所的一些内部人员创建一个小型网络工具。此Web工具接受两个输入参数,这些参数通过SQL服务器上的存储过程发送。存储过程在Web工具中将两个表返回到它们自己的GridView中。

但是,我注意到如果存储过程没有为一个或两个结果表返回任何值,则该工具会“爆炸”并产生运行时错误。如果表中实际上没有结果,我希望GridView(?)声明没有返回记录。这是我到目前为止的代码:

protected void Button1_Click(object sender, EventArgs e)
    {
        SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["connString"].ConnectionString); 

    con.Open();

    SqlCommand cmd; //Set up command variable
    cmd = new SqlCommand("[dbo].[CSP]", con); //set command variable equal to CSP stored proc
    cmd.CommandType = CommandType.StoredProcedure; //set command type as stored procedure
    cmd.Parameters.Add(new SqlParameter("@customer_number", SqlDbType.NVarChar)).Value = TextBox1.Text;
    cmd.Parameters.Add(new SqlParameter("@part_number", SqlDbType.NVarChar)).Value = TextBox2.Text;

    if (TextBox1.Text == "" && TextBox2.Text == "")
    {
        lblMessage1.Text = "Please enter the Account & Part Numbers.";
        lblMessage1.ForeColor = System.Drawing.Color.Red;
    }
    else if (TextBox1.Text == "" && TextBox2.Text != "")
    {
        lblMessage1.Text = "Please enter the Account Number.";
        lblMessage1.ForeColor = System.Drawing.Color.Red;
    }

    else if (TextBox1.Text != "" && TextBox2.Text == "")
    {
        lblMessage1.Text = "Please enter the Part Number.";
        lblMessage1.ForeColor = System.Drawing.Color.Red;
    }

    else
    {
        lblMessage1.Text = "";
        SqlDataAdapter adp = new SqlDataAdapter();
        DataSet ds1 = new DataSet();
        adp.SelectCommand = cmd;
        adp.Fill(ds1);
        GridView1.DataSource = ds1.Tables[0];
        GridView1.DataBind();
        GridView2.DataSource = ds1.Tables[1];
        GridView2.DataBind();

        con.Close();
    }
}

有人可以帮我模拟如何处理此错误处理问题吗?希望这很清楚。非常感谢提前。

2 个答案:

答案 0 :(得分:1)

if (ds.Tables[0].Rows.Count > 0)
{
    GridView1.DataSource = ds1.Tables[0];
    GridView1.DataBind();
}

if (ds.Tables[1].Rows.Count > 0)
{
    GridView2.DataSource = ds1.Tables[1];
    GridView2.DataBind();
}

答案 1 :(得分:0)

你还没有提到你的错误是什么,所以我无法说出来。但是,如果您想在GridView为空时显示一些自定义消息,则可以使用GridView's EmptyDataTemplate

<EmptyDataTemplate>
    Move along, people - nothing to see here.  
</EmptyDataTemplate>