代码无法正常工作:未处理的OleDbException

时间:2014-07-08 07:00:58

标签: c# asp.net sql ms-access

下面没有使用ms access database的代码:

protected void Page_Load(object sender, EventArgs e)
{
    BindData();
}

private void BindData()
{
    OleDbConnection conn = new OleDbConnection();
    conn.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Documents and Settings\IT1\My Documents\Downloads\examples\demo1\kk.accdb";
    conn.Open();
   string sql = "Select * from Category Where CategoryID IN (Select CategoryID from Product3)";
    OleDbCommand cmd = new OleDbCommand(sql, conn);
    OleDbDataAdapter ad = new OleDbDataAdapter(cmd);
    DataSet ds = new DataSet();
    ad.Fill(ds, "Category3");
    ad.Dispose();

    sql = "Select p.PID,p.ImageName,p.CategoryID from Product p";
    cmd.CommandText = sql;
    ad = new OleDbDataAdapter(cmd);
    ad.Fill(ds, "Product");
    ad.Dispose();

    ds.Relations.Add(new DataRelation("CategoriesRelation", ds.Tables[0].Columns["CategoryID"],
    ds.Tables[1].Columns["CategoryID"]));
    outerRep.DataSource = ds.Tables[0];
    outerRep.DataBind();
 }


protected void outerRep_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    if (e.Item.ItemType == ListItemType.Item ||
    e.Item.ItemType == ListItemType.AlternatingItem)
    {
        DataRowView drv = e.Item.DataItem as DataRowView;
        Repeater innerRep = e.Item.FindControl("innerRep") as Repeater;
        innerRep.DataSource = drv.CreateChildView("CategoriesRelation");
        innerRep.DataBind();

    }
}

我正在使用嵌套转发器根据类别显示产品。它给出了数据集填充时间的错误。以下是我的错误链接:

![在此处输入图片说明] [1]

2 个答案:

答案 0 :(得分:2)

我认为你应该逐一填写DataTable

private void BindData()
{
    OleDbConnection conn = new OleDbConnection();
    conn.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Documents and Settings\IT1\My Documents\Downloads\examples\demo1\kk.accdb";
    conn.Open();

    string sql = "Select * from Category3 Where CategoryID IN (Select CategoryID from Product3)";
    OleDbCommand cmd = new OleDbCommand(sql, conn);
    OleDbDataAdapter ad=new OleDbDataAdapter(cmd);
    DataSet ds=new DataSet();
    ad.Fill(ds, "Category3");
    ad.Dispose();

    sql = "Select p.PID,p.ImageName,p.ImgUrl,p.VideoName,p.VideoSize,p.CategoryID from Product3 p";
    cmd.CommandText = sql;
    ad=new OleDbDataAdapter(cmd);
    ad.Fill(ds, "Product3");
    ad.Dispose();

    ds.Relations.Add(new DataRelation("CategoriesRelation",ds.Tables[0].Columns["CategoryID"],
    ds.Tables[1].Columns["CategoryID"]));
    outerRep.DataSource=ds.Tables[0];
    outerRep.DataBind();
 }

修改

使用表架构更新

答案 1 :(得分:1)

此select语句不起作用:

string sql = "Select * from Category3 
    Where CategoryID IN (Select CategoryID from Product3) 
    Select p.PID,p.ImageName,p.ImageUrl,p.VideoName,p.VideoSize,p.CategoryID 
    from Product3 p ";

将其更改为:

string sql = "Select * from Category3 
    Where CategoryID IN (Select CategoryID from Product3)";

另请查看:http://ericlippert.com/2014/03/05/how-to-debug-small-programs/