An exception of type 'System.InvalidOperationException' occurred in System.Data.dll but was not handled in user code

狂风中的少年 提交于 2019-12-25 17:42:40

问题


I have a gridview whose value for a column

<asp:HyperLinkField DataNavigateUrlFields="runId" DataTextField="PercentAnalysed" ControlStyle-CssClass="hlink" HeaderText="% ANALYSED" ItemStyle-Width="6%" DataNavigateUrlFormatString="runanalysis.aspx?runId={0}" ItemStyle-Font-Underline="true"/>

is decided by the below code.

protected void GridView2_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {

                GridViewRow item = e.Row;
                //int myvar;
                //Int32.TryParse(item.Cells[0].Text, out myvar);

                SqlConnection con = new SqlConnection(connectionstring.ToString());
                string selectSQL = "  SELECT COUNT(*) AS 'Count' FROM Analysed WHERE runId =@myvar group by runId";
                SqlCommand cmd = new SqlCommand(selectSQL, con);

                cmd.Parameters.AddWithValue("@myvar", item.Cells[0].Text);
                SqlDataReader reader;
                try
                {   con.Open();
                    reader = cmd.ExecuteReader();
                    reader.Read();
                    if (item.Cells[8].Text.Equals("0"))
                        item.Cells[13].Text = "0";
                    else
                    {
                        if (reader["Count"].ToString().Equals("0"))
                            item.Cells[13].Text = "0";
                        else
                            item.Cells[13].Text = reader["Count"].ToString();
                            reader.Close();
                    }
                }

                finally
                {
                    con.Close();
                }


            }
        }

I tried debugging it and it gives this exception.

The exception also says additionally that I am trying to read a value when no value is present.

I executed the query separately and the results are fine but for some cases no data is present. So I inserted this check :

if (reader["Count"].ToString().Equals(""))

but still the same exception.

Any idea ?

Also,I just experimented with some dummy value.The column gets that value but it is very weird that it is no more a hyperlink.


回答1:


if (reader["Count"].ToString().Equals("")) will also try to read the data. SO you have to check "reader.HasRows()" before you try to read it.

Might not be mandatory, but I think you should consider below comments I am making.

Code Review :)

if (e.Row.RowType == DataControlRowType.DataRow)
{
GridViewRow item = e.Row;
// Consider this condition here. No need to execute connection and command if u hard coding the value
    if (item.Cells[8].Text.Equals("0"))
    {
        item.Cells[13].Text = "0";
        return;
    }




// You should always try to do this thing in using?  
//using (var sqlConnection = new SqlConnection(connectionstring)

SqlConnection con = new SqlConnection(connectionstring.ToString());

string selectSQL = "  SELECT COUNT(*) AS 'Count' FROM Analysed WHERE runId =@myvar group by runId";
SqlCommand cmd = new SqlCommand(selectSQL, con);
cmd.Parameters.AddWithValue("@myvar", item.Cells[0].Text);
SqlDataReader reader;
try
{   con.Open();
    // What about using command behaviour here?? e.g., command.ExecuteReader(CommandBehavior.CloseConnection)
    reader = cmd.ExecuteReader();
    if(reader.HasRows())
    {
       reader.Read();

        //if (item.Cells[8].Text.Equals("0"))  // this check should go as first thing in method
            //item.Cells[13].Text = "0";
        //else
        //{
            if (reader["Count"].ToString().Equals("0"))
                item.Cells[13].Text = "0";
            else
                item.Cells[13].Text = reader["Count"].ToString();
                reader.Close();
        //}
    }
}

finally
{
    con.Close();
}


来源:https://stackoverflow.com/questions/28987872/an-exception-of-type-system-invalidoperationexception-occurred-in-system-data

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!