如何克服错误

时间:2011-05-19 11:51:47

标签: c#

我正在添加,编辑删除模块...为此我在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没有行。”......我该怎样克服这个?

2 个答案:

答案 0 :(得分:2)

那表明该ID没有记录。您应该在继续之前检查它并尝试使用它。您可以使用ds.Tables[0].Rows.Count来查找返回的行数。

您应该开始使用参数化查询,而不是直接在您正在构建的SQL语句中包含值,以避免SQL注入攻击。如果ID是一个整数,那么这里可能不是问题,但通常参数化的SQL查询是前进的方法。

答案 1 :(得分: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