waleed_akre Ответов: 2

Недопустимая попытка чтения при отсутствии данных


<blockquote class="quote"><div class="op">Quote:</div>          try
            {
                if (cn.State.ToString() != "Open")
                    cn.Open();
                cmd = new SqlCommand("select Antibiotic,RectionA,RectionB  from Culture", cn);
                dr = cmd.ExecuteReader();

                for (int i = 0; i < 5; i++)
                {
                    dataGridView5.Rows.Add(dr["Antibiotic"].ToString());
                    dataGridView5.Rows.Add(dr["RectionA"].ToString());
                    dataGridView5.Rows.Add(dr["RectionB"].ToString());
                }
                dr.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message + "eeee");
            }
            finally
            {
                cn.Close();
            }</blockquote>


Что я уже пробовал:

I want read data from sql server to my datagriedview 

but in datagriedview i have 3 columns

please help me 

Richard MacCutchan

Всегда проверяйте возвращаемое значение в dr, чтобы узнать, действительно ли вы получили какие-либо данные.

2 Ответов

Рейтинг:
20

Karthik_Mahalingam

Попробуйте использовать sqldataadapter[^]

SqlCommand cmd = new SqlCommand("select Antibiotic,RectionA,RectionB  from Culture", con);
           SqlDataAdapter da = new SqlDataAdapter(cmd);
           DataTable dt = new DataTable();
           da.Fill(dt);
           for (int i = 0; i < dt.Rows.Count; i++)
           {
               if (i < 5) {
                   DataRow row = dt.Rows[i];
                   dataGridView5.Rows.Add(row["Antibiotic"].ToString(), row["RectionA"].ToString(), row["RectionB"].ToString());
               }
           }

Это будет отображать только верхние 5 строк в соответствии с вашей логикой кода, если вы хотите загрузить все данные в gridview, удалите IF состояние


Рейтинг:
1

Donathan.Hutchings

Похоже, что dr имеет значение null после запроса. Вам нужно выполнить проверку dr.HasRows, прежде чем войти в цикл. Вам нужно использовать foreach, а не for в вашем цикле, а не предполагать количество строк.