我正在添加,编辑删除模块...为此我在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 :(得分: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