我正在为我工作场所的一些内部人员创建一个小型网络工具。此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();
}
}
有人可以帮我模拟如何处理此错误处理问题吗?希望这很清楚。非常感谢提前。
答案 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>