C# 如何克服错误

C# 如何克服错误,c#,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\\mayu

我正在制作添加、编辑和删除模块…为此,我在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].行[0]处显示错误;RangeException的IndexOutOf已被处理,错误是位置0处没有行……我应该如何克服此问题?

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

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

如何:

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

在尝试创建DataRow之前,我会检查ds.Tables[0].Rows.Count是否不是0。请在DataRow dr=ds.Tables[0].Rows[0]行放置断点;看看你的ds变量里面有没有什么东西。很抱歉,它不起作用。它给出的错误不能隐式地将类型“int”转换为“System.Data.DataRow”@Barbie:这不可能是同一个错误,因为你以前谈论过一个异常,现在谈论的是编译时错误。大概你已经改变了代码-更新你的问题,所以我们知道你是如何改变代码的。@芭比:你考虑过Curn属性返回的内容吗?它返回表中有多少数据行。这不是一个数据行,而是一个int。关键是你需要知道返回了多少个结果-如果它返回了0个结果,你不应该要求第一个结果。我和dr有什么关系?你能告诉我吗?当然,这是你需要知道的。数据行的使用定义了程序的功能。我不能告诉你你的程序应该做什么。