C# 关于数据库dateset的问题
我的数据库用的是access,名称叫做Notes,里面有一个tip表.第一列是no自动编号,第二列是state (0或1)
但是listview的第一列是state 第二列是no(因为只有listview只有第一列才能显示图片)
程序执行的时候点添加的时候数据库里面的数据添加了,但是程序却弹出错误:
未处理的“System.IndexOutOfRangeException”类型的异常出现在 System.Data.dll 中。
其他信息: 在位置 0 处没有任何行。
各位高手你们说到底我错在哪里了阿?
- C# code
private void Button1_Click(object sender, EventArgs e) //鼠标点击事件添加 { Product p = new Product(); p.State = 0; p.Createtime = DateTime.Now; int no = insert(p); p = getById(no); //这里面的get.ById(no)里面有错 AddProduct(p); }public static getById(int no) { string sql = "select * from tip where no=?"; OleDbParameter[] parameters = new OleDbParameter[1]; parameters[0] = new OleDbParameter("@no", OleDbType.Integer); parameters[0].Value = no; DataSet ds = AccessDBUtil.ExecuteQuery(sql, parameters); return Row2Product(ds.Tables["ds"].Rows[0]); //执行时这里显示错误,在位置0处没有任何行 }//执行查询语句,返回dataset public static DataSet ExecuteQuery(string sql, OleDbParameter[] parameters) { String connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Notes.mdb"; OleDbConnection connection = new OleDbConnection(connectionString) DataSet ds = new DataSet(); connection.Open(); OleDbDataAdapter da = new OleDbDataAdapter(sql, connection); da.SelectCommand.Parameters.AddRange(parameters); da.Fill(ds, "ds"); return ds; } //------------------------------------下面的应该不是很重要----------------------------------------------- //product类 public class Product { private int no; private int state; public Product() { } public int No { get { return no; } set { no = value; } } public int State { get { return state; } set { state = value; } } } //添加到listview private void AddProduct(Product p) { ListViewItem lvi; if(p.State==0) //如果等于0就用第一副图片,等于1就用第二副图片 lvi = this.listView1.Items.Add("",0); else lvi = this.listView1.Items.Add("",1); lvi.SubItems.Add(p.No.ToString()); }
[解决办法]
[解决办法]
1)查看insert,看no是多少?
2查看数据库,看no
如果二者不一致,或者数据不在数据库中,说明insert过程错误,检查insert
3)查看GetbyId,在执行查询前,看参数值是多少,传进去了没有?
4)先得到DataTable,然后查看行数,如果得到Table有误,应该是查询语句的问题,如果不是,看行数是多少,如果是0
而数据库中又有,就如楼上说参数传递形式的问题了。不过我用过的,用”?“是可以的。你可以改成连接
字符串的形式看看。
[解决办法]
字段名称过于简单? 你改复杂点试试 比如 t_no
[解决办法]
你可以直接在调试模式下点出dataset来看的。watch中添加对应dataset变量,然后可以在右边看到放大镜一样的图标点击就可弹出对应的dataset图形浏览界面