• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

asp.net中的主从新增,修改,删除。

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

在asp.net中關於主從新增問題,網絡上很多朋友問起,很多解決的辦法不是很好,關鍵是同步問題,下面是我的做法,

歡迎大家提出更好的辦法。

在主從新增中,主表一筆,從表多筆,在新增,,修改,刪除從表時必須和主表一起保存,並且主表和從表都會有新增,修改,刪除。所以必須用到以下技術:

1.首先必須用到事務來確保一致性。

2.需要用到ado.net的批量更新。

3.從表數據必須在內存中處理,然後在批量更新到數據庫中

下面是部分代碼

private DataSet ds
      {
          get
          {
              object o = ViewState["ds"];
              return o == null ? null : (DataSet)o;
          }
          set { ViewState["ds"] = value; }
      }

定義一個dataset屬性,用來在內存中操作從表數據,也可以保存在Session中

public bool SaveData(Model.Budget_Mdl mdl, DataSet ds, string tableName, string EditMethod, out string ret)
{
    //保存主表
    SqlConnection conn = new SqlConnection(SQLHelper.strCONN);
    lock (this)
    {
        conn.Open();
        SqlCommand cmd = new SqlCommand();
        SqlTransaction tran;
        tran = conn.BeginTransaction();
        cmd.Connection = conn;
        cmd.Transaction = tran;
        try
        {
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.CommandText = "SPC_Bud";
            cmd.Parameters.Add("@EditMethod", SqlDbType.NChar).Value = EditMethod;
            cmd.Parameters.Add("@CHANFORM_ID", SqlDbType.NChar).Value = mdl.CHANFORM_ID;
            cmd.Parameters.Add("@Bill_Character", SqlDbType.NChar).Value = mdl.Bill_Character;
            cmd.Parameters.Add("@BUD_YEAR", SqlDbType.Int).Value = mdl.BUD_YEAR;
            cmd.Parameters.Add("@APPLICANT", SqlDbType.NVarChar).Value = mdl.APPLICANT;
            cmd.Parameters.Add("@APPLYDATE", SqlDbType.NChar).Value = mdl.APPLYDATE.ToString("yyyy-MM-dd");
            cmd.Parameters.Add("@FORMTYPE", SqlDbType.NChar).Value = mdl.FORMTYPE;

            cmd.Parameters.Add("@REMARKS", SqlDbType.NVarChar).Value = mdl.REMARKS;
            cmd.Parameters.Add("@C_USER", SqlDbType.NVarChar).Value = mdl.C_USER;
            cmd.Parameters.Add("@M_USER", SqlDbType.NVarChar).Value = mdl.M_USER;

            cmd.Parameters.Add("@ret", SqlDbType.NVarChar);
            cmd.Parameters["@ret"].Size = 10;
            cmd.Parameters["@ret"].Direction = ParameterDirection.Output;
            cmd.ExecuteNonQuery();
            ret = Convert.ToString(cmd.Parameters["@ret"].Value);
            foreach (DataRow row in ds.Tables["budDtl"].Rows)
            {
                if (row.RowState == DataRowState.Added)
                    row["CHANFORM_ID"] = ret;
            }
            //保存細表
            if (EditMethod == "I" || EditMethod == "U")
            {
                string strSql = "Select * from TB_BUDGET_DETAIL";
                Helper.BatchUpdate(ds, conn, tableName, strSql, tran);
            }
            tran.Commit();
            return true;

        }
        catch (Exception err)
        {
            tran.Rollback();
            throw err;
        }
        finally
        {
            conn.Close();
        }
    }
}

 

 

Model用來傳遞主表,DataSet用來傳遞從表

要注意的地方是從表必須有主鍵


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
ASP.NETMVC域名泛解析设置发布时间:2022-07-10
下一篇:
ASP.NET Mvc Preview 5 演示Demo #3 实现MVC批量上传文件发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap