解决方案 »

  1.   

    主从关系是这样的:
    AllocIn为配货单表,有主键AllocInID
    AllocInDet为配货明细表,主键AllocInDetID和一个外键AllocInID至于主从关系,我试过了,先删除主表AllocIn, 再删除这个Id下面的所有AllocInDet表项,代码如下,也是不可以。
    DataSet ds1;
                        //TSM.Model.CK_AllocInDet modelCK_AllocInDet = m_bllCK_AllocInDet.GetModel(id);
     
                        //string searchText = modelCK_AllocInDet.CK_AllocInID.ToString();
                        string strWhere = "CK_AllocInID = " + id;
     
                        ds1 = m_bllCK_AllocInDet.GetList(strWhere);
                        ds1.Tables[0].Clear();
                         
                        m_bllCK_AllocIn.Delete(id);报错如下,和前次一样,这是完整的错误信息窗口。 
    System.Data.SqlClient.SqlException: DELETE 语句与 REFERENCE 约束"FK__CK_AllocI__CK_Al__5B0E7E4A"冲突。该冲突发生于数据库"testDP",表"dbo.CK_AllocInDet", column 'CK_AllocInID'。
    语句已终止。
    在 Maticsoft.DBUtility.DbHelperSQL.ExecuteSql(String SQLString, SqlParameter[] cmdParms) 位置 E:\testDP\DBUtility\DbHelperSQL.cs:行号 568
    在 TSM.DAL.CK_AllocIn.Delete(Int32 CK_AllocInID) 位置 E:\testDP\DAL\CK_AllocIn.cs:行号 112
    在 TSM.BLL.CK_AllocIn.Delete(Int32 CK_AllocInID) 位置 E:\testDP\BLL\CK_AllocIn.cs:行号 56
    在 FineUIDemo.AllocIn.Grid1_RowCommand(Object sender, GridCommandEventArgs e) 位置 E:\testDP\EmptyProjectNet20\CK_AllocIn.aspx.cs:行号 139恳求各位大侠有以教我,拜谢了。。
      

  2.   


    试过了,也是不行。先删除主表Alloc配送单表,再删除AllocDet表。一样报错呢
      

  3.   

    数据库早先在定义时,考虑的是ON UPDATE CASCADE 即便主表没了,从表还可以查得到。现在看来,没得法了
      

  4.   

    我最初贴的源码就是这样的,先删从表AllocDet,再是主表,不行呢。
      

  5.   

            protected void Grid1_RowCommand(object sender, GridCommandEventArgs e)
            {
                int id = Convert.ToInt32(Grid1.DataKeys[e.RowIndex][0]);            if (e.CommandName == "Delete")
                {                try
                    {
                        /* 这里删除时,先删除从表AllocInDet明细表的内容 */
                        DataSet ds1;
                        string strWhere = "CK_AllocInID = " + id;                    ds1 = m_bllCK_AllocInDet.GetList(strWhere);
                        ds1.Tables[0].Clear();最后一行,那样删除表,有没有问题呢???????
      

  6.   

    这样根本没有删除表,要用delete方法去删
      

  7.   


    是的,我也发现了,只是清除了ds中的数据,而相关的数据库并没有变化问题是,怎么根据ds来删除数据库表呢,删除接口要求输入的是主键,请以教我,谢谢先。
      

  8.   

    以下是我做的尝试,仍然不行。求教了。
    /* 这里删除时,先删除从表AllocInDet明细表的内容 */
    DataSet ds1;
    string strWhere = "CK_AllocInID = " + id; ds1 = m_bllCK_AllocInDet.GetList(strWhere);
    int cnt = ds1.Tables[0].Rows.Count;
    SqlDataAdapter myDA = new SqlDataAdapter();
    /*
    for (int i = 0; i < cnt; i++)
    {      // 想逐行删除,又不知怎么从ds中获取每行的主键
    ds1.Tables[0].Rows[i].
    }
    */
    try
    {
    myDA.Update(ds1.Tables[0]);
    }
    catch (Exception ex)
    {
    this.Response.Write(ex.Message);
    }
      

  9.   

    这样也试过了,我了了去个。。搞不定,看得数据库得重来
                        DataSet ds1;
                        string strWhere = "CK_AllocInID = " + id;                    ds1 = m_bllCK_AllocInDet.GetList(strWhere);
                        int cnt = ds1.Tables[0].Rows.Count;                 
                        for (int i = 0; i < cnt; i++)
                        {
                            DataRow deleteRow = ds1.Tables[0].Rows[i];
                            deleteRow.Delete();
                        }                    SqlDataAdapter myDA = new SqlDataAdapter();
                        try
                        {
                            myDA.Update(ds1.Tables[0]);
                        }
                        catch (Exception ex)
                        {
                            this.Response.Write(ex.Message);
                        }
      

  10.   

    给你支个招,你绑定时候多绑定一列隐藏的,然后绑定主键,就OK了这是主表AllocIn的后台实现,明细表AllocInDet表是通过AllocIn表的AllocID(在明细表中为外键)查到的一个数据集(如上代码),怎么绑定得了明细表的主键呢,
      

  11.   


    我也想直接使用BLL层接口直接删除数据库表,可是不知道如何根据数据集拿到每行的主键呢,
    BLL层接口删除数据表项如下:id为主键
    m_bllCK_AllocIn.Delete(id);
      

  12.   

    给你支个招,你绑定时候多绑定一列隐藏的,然后绑定主键,就OK了这是主表AllocIn的后台实现,明细表AllocInDet表是通过AllocIn表的AllocID(在明细表中为外键)查到的一个数据集(如上代码),怎么绑定得了明细表的主键呢,
    噢,总算看明白了,你查询的时候可以查出来主键,没错吧,然后在数据集中这样去拿:
    string ID= ds1.Tables[0].Rows[i]["主键列"].ToString();
    这样就OK了