【问题标题】:How to overcome from the error如何克服错误
【发布时间】:2011-05-19 11:51:47
【问题描述】:

我正在制作添加、编辑删除模块...为此,我在 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 处没有行。”...我应该如何克服这个问题?

【问题讨论】:

  • 在尝试创建 DataRow 之前,我会检查 ds.Tables[0].Rows.Count 是否不为 0
  • 在 "DataRow dr = ds.Tables[0].Rows[0];" 行放一个断点看看你的“ds”变量里面是否有任何东西。

标签: c#


【解决方案1】:

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

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

【讨论】:

  • 很抱歉,它不起作用。它给出的错误是“无法将类型'int'隐式转换为'System.Data.DataRow'”
  • @Barbie:这不可能是同一个错误,因为您之前谈论的是异常,而现在您谈论的是编译时错误。假设您更改了代码 - 请更新您的问题,以便我们知道如何您更改了代码。
  • @Barbie:你考虑过Count 属性返回什么吗?它返回表中有多少数据行。它不是 DataRow,而是 int。关键是您需要知道返回了多少结果 - 如果返回 0 个结果,则不应要求第一个。
【解决方案2】:

怎么样:

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 Expample 基本上,这就是你需要知道的。数据行的使用定义了你的程序做什么。我不能告诉你你的程序应该做什么。
猜你喜欢
  • 2016-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-19
  • 2021-11-20
  • 2019-04-19
  • 2020-05-01
相关资源
最近更新 更多