类似于入库单的保存,有表头和表体;对应于数据库中的主表和字表;
主表中的主键不是自动增长的;保存代码放在一个事务中:当保存主表以后,如何将主表的主键插入到字表中?

解决方案 »

  1.   

    子表中我使用的是dataadapter;
    保存字表是用dataadapter.update();
    其中主表的主键在datagridview中是隐藏的一列!在保存的时候,子表总是空的; private string  Save()
            {
                string str = "";
                if (tbx_id.Text == "" || tbx_name.Text == "")
                {
                    MessageBox.Show("信息不完整!", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
                OracleConnection oracn = new OracleConnection(_connString);
                OracleTransaction oratran = null;
                OracleCommand oracmd = new OracleCommand();
                
                try
                {
                    oracn.Open();
                    oratran = oracn.BeginTransaction();
                    oracmd.Transaction = oratran;
                    if (_add)  //表示新增
                    {
                        oracmd.CommandText = "insert into element_assemble (assemble_id,assemble_name,memo) values('" + tbx_id.Text + "','" + tbx_name.Text + "'" +
                            " ,'" + tbx_memo.Text + "')";
                        oracmd.Connection = oracn;
                        oracmd.ExecuteNonQuery();
                        for (int i = 0; i < dataGridView1.Rows.Count; i++)
                        {
                            dataGridView1.Rows[i].Cells[0].Value = tbx_id.Text;
                            
                        }
                        orada.Update(ds.Tables[0]);                   
                        oratran.Commit();
                    }
                }
                catch (Exception ex)
                {
                    oratran.Rollback();
                    MessageBox.Show(ex.Message, "错误", MessageBoxButtons.OK , MessageBoxIcon.Error );
                    str = ex.Message;
                    
                }
                finally
                {
                    if (oracn.State == ConnectionState.Open) oracn.Close();
                }            return str;
            }
      

  2.   

    我是要用sqldataadapter.update()来保存子表;
    如何操作?
    谢谢!
      

  3.   

    只想到了 主表的主键不是自动生成的,肯定是算法取出来的,
    把这个值 分别查到主表 和它关联的子表对应的字段中去 就可以了
    两个sql实现 string MainSql = "insert into '主表' (id) value("+ 主键变量 +")";
    .....
    关联的子表select distinct object_name(fkeyid) as 表名, object_name(constid) as 外键名 
    from sysreferences 
    where rkeyid = object_id('主表') order by 1
      

  4.   

    用sqlcommandbuilder自动生成命令!
      

  5.   

    我跟踪了一下,发现sqlcommandbuilder的selectcommand是有的;但是insertcommand是null;
    所以不能保存!
      

  6.   

    为什么insertcommand是空的呢?
      

  7.   

    我试了一下!
    在另外的一个页面:用一个表填充,用sqldataadapter和sqlcommandbuilder来保存多行就没有问题!为什么这里用在子表上就不行呢?请各位大虾帮忙!谢谢!