'There is no row at position 2

I am trying to execute this code in getting an error as

There is no row at position 2"

How can I solve this?

public JsonResult Question()
        {

            try
            {
                string [] Question=new string[2];

                SqlConnection con = new SqlConnection(connectionString: "Server = (localdb)\\mssqllocaldb; Database = QuestionDb; Trusted_Connection = True; MultipleActiveResultSets = true");
                con.Open();
                string query = "";
                query += @"select Id,Sum(Yes) AS T_Yes,Sum(No) AS T_No,Sum(DontKnow) AS T_DontKnow from dbo.Questions Group By Id";
                SqlCommand cmd = new SqlCommand(query, con);

                
                cmd.CommandText = query;
                DataTable dt = new DataTable();
                SqlDataAdapter cmd1 = new SqlDataAdapter(cmd);

                cmd1.Fill(dt);
                
                    if (dt.Rows.Count == 0)
                    {

                        Question[0] = "0";
                        Question[1] = "0";
                        Question[2] = "0";
                    }
                    else
                    {
                        Question[0] = dt.Rows[0]["T_Yes"].ToString();
                        Question[1] = dt.Rows[1]["T_No"].ToString();
                        Question[2] = dt.Rows[2]["T_DontKnow"].ToString();
                    }
                
                    return Json(Question);


Solution 1:[1]

The problem is that you are mixing rows and columns. Use:

Question[0] = dt.Rows[0]["T_Yes"].ToString();
Question[1] = dt.Rows[0]["T_No"].ToString();
Question[2] = dt.Rows[0]["T_DontKnow"].ToString();

You must use always dt.Rows[0] (instead of [1] or [2]) to get the properties of the first row.

Solution 2:[2]

You're checking only to row count = 0, try this:

Also for comentary answer you need all data for the pie chart so need to recover all records.

Add a reference to System.Data, System.Collections.Generic and System.Linq to your project if this does not compile

List<string[]> listofIdGroups;
        List<string[]> listofIdGroups;
        listofIdGroups = dt.Rows.OfType<DataRow>()
            .Select(dr => new string[3] { dr["T_Yes"].ToString(), dr["T_No"].ToString(), dr["T_DontKnow"].ToString() }).ToList(); 

you can read the list this way:

        foreach (string[] question in listofIdGroups) 
        {
            Console.WriteLine("Yes:" + question[0] + Environment.NewLine + "No: " + question[1] + Environment.NewLine + "DontKnow: " + question[2]);
        }

try it here: https://dotnetfiddle.net/0S1N3c

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1
Solution 2