2011-05-19 21 views
0

им решений добавлять, редактировать удалять модуль ... Для этого у меня есть следующий код в C#,Как преодолеть от ошибки

private void listOfCompany_Load(object sender, EventArgs e) 
    { 
     //MessageBox.Show(updID.ToString()); 
     con.ConnectionString = @"PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\Documents and Settings\\mayur patil\\My Documents\\Dairy_db\\tblCompany_1.mdb"; 
     con.Open(); 
     OleDbDataAdapter da = new OleDbDataAdapter(); 
     DataSet ds = new DataSet(); 
     string sql = "SELECT * From tblCompany_1 WHERE ID="+updID; 

     da = new System.Data.OleDb.OleDbDataAdapter(sql, con); 
     da.Fill(ds); 
     // dataGridView1.DataSource = ds.Tables[0]; 
     DataRow dr = ds.Tables[0].Rows.Count; 
     textBox1.Text = dr.ItemArray.GetValue(0).ToString(); 
     textBox4.Text = dr.ItemArray.GetValue(2).ToString(); 
     /* int t = ds.Tables[0].Columns.Count; 
     for (int i = 0; i < cnt; i++) 
     { 

      dataGridView1.Rows[i].Cells[0].Value = dr.ItemArray.GetValue(0).ToString(); 
      dataGridView1.Rows[i].Cells[1].Value = dr.ItemArray.GetValue(1).ToString(); 
      dataGridView1.Rows[i].Cells[2].Value = dr.ItemArray.GetValue(2).ToString(); 
     }*/ 


    } 

, когда я отладки приложения, затем добавлять, редактировать и удалять , это дает мне ошибку в «DataRow dr = ds.Tables [0] .Rows [0];» что обработано «IndexOutOf RangeException», и ошибка «Нет строки в позиции 0». ... Как я должен победить из этого?

+0

Я бы удостоверился, что ds.Tables [0] .Rows.Count не 0, прежде чем пытаться создать DataRow –

+0

Положить контрольную точку в строку «DataRow dr = ds.Tables [0 ] .Rows [0];» и посмотрите, есть ли у вашей переменной «ds» что-то внутри. – FelixMM

ответ

2

Ну, это говорит о том, что нет записи с этим удостоверением личности. Вы должны проверить это, прежде чем идти вперед и пытаться использовать его. Вы можете использовать ds.Tables[0].Rows.Count, чтобы узнать, сколько строк было возвращено.

Вы должны также начать использовать параметризованные запросы вместо того, чтобы включать значения непосредственно в SQL-запрос, который вы строите, чтобы избежать атак SQL-инъекций. Если идентификатор является целым числом, то, вероятно, здесь не проблема, но в основном параметризованные SQL-запросы - это путь вперед.

+0

Хорошо .. Я попробую..Thanx .. – Barbie

+0

Извините, но он не работает. Он дает ошибку «Невозможно неявно преобразовать тип« int »в« System.Data.DataRow »« – Barbie

+0

@Barbie : Где? Какой код не работает? –

0

Как насчет:

DataRow dr; 

for(int i = 0; i<ds.Tables.Count; i++){ 
    for(int j = 0; j<ds.Tables[i].Rows.Count; j++){ 
    dr = ds.Tables[i].Rows[j]; 
    //Do something with dr. 
    } 
} 

Примечание: Это, возможно, "Длина" в смену "Граф". Не могу вспомнить прямо сейчас: p

+0

Что мне делать с д-ром? Не могли бы вы рассказать мне? – Barbie

+0

Что бы вы ни хотели. – Automatico

+0

например ???? – Barbie

Смежные вопросы