数据库层封装

using System;

using System.ComponentModel;

using System.Collections;

using System.Diagnostics;

using System.Data;

using System.Data.SqlClient;

using System.Data.OleDb;

using System.Configuration;

using System.IO;



namespace DataAccess

{

    public class Database : IDisposable

    {      

       

        private SqlConnection connection;


        ///

        /*  描    述: 执行连锁的插入操作。

         *             即利用插入语句sqlOne得到的ID作为后面插入语句的属性之一。

         *  输入参数: 

         *             sqlOne       执行的第一条SQL语句,

         *             pramsOne     sqlOne语句对应的参数,

         *             sqls         连锁执行的SQL语句链表,

         *             prams        与sqls中每条SQL语句相对应的参数。

         * 

         * sqls和prams示例: 

         *             string sqlOne = "insert into T_User(...) values(...)"; // T_Userd的UserID自增。

         *             SqlParameter[] pramsOne = {...};

         * 

         *             int areaid = 123;

         *             // 注:与未知id对应的idvalue设置为@_ID_VALUE,此处UserID未知。

         *             string sql1 = "insert into T_UserArea(UserID, AreaID) values(@_ID_VALUE, @areaid)";

         *             SqlParameter[] pram1 = 

         *             {

         *                 null, // 注:与未知id对应参数设置为空。

         *                 db.MakeInParam("@areaid", SqlDbType.Int, 4, areaid)

         *             };

         *             ......

         *  

         *             ArrayList arraySQL = new ArrayList();

         *             ArrayList arrayPram = new ArrayList();

         *             sqls.Add(sql1);

         *             prams.Add(pram1);

         *             .......

         *             

         *             int id = db.ExecuteReturnID(sqlOne, pramsOne, sqls, prams, "...methodName");

         * 

         *  返 回 值: int --> 执行成功,返回执行第一条语句所插入的一条记录的ID值。

         *                 --> 执行失败,返回-1。

         * 

         */

        /// <summary>

        /// 执行插入多个表的操作,第一个表(sqlOne)的主键为自动增长,若id=-1则插入失败

        /// 利用插入语句sqlOne得到的ID作为后面插入语句的属性之一

        /// 

        /// sqls和prams示例:

        ///            string sqlOne = "insert into T_User(...) values(...)"; // T_Userd的UserID自增。

        ///            SqlParameter[] pramsOne = {...};

        /// 

        ///            int areaid = 123;

        ///            // 注:与未知id对应的idvalue设置为@_ID_VALUE,此处UserID未知。

        ///            string sql1 = "insert into T_UserArea(UserID, AreaID) values(@_ID_VALUE, @areaid)";

        ///            SqlParameter[] pram1 = 

        ///            {

        ///                null, // 注:与未知id对应参数设置为空。

        ///                db.MakeInParam("@areaid", SqlDbType.Int, 4, areaid)

        ///            };

        ///            ......

        /// 

        ///            ArrayList arraySQL = new ArrayList();

        ///            ArrayList arrayPram = new ArrayList();

        ///            sqls.Add(sql1);

        ///            prams.Add(pram1);

        ///            .......

        ///            

        ///            int id = db.ExecuteReturnID(sqlOne, pramsOne, sqls, prams, "...methodName");

        /// 

        /// </summary>

        /// <param name="sqlOne">执行的第一条SQL语句</param>

        /// <param name="pramsOne">sqlOne语句对应的参数</param>

        /// <param name="sqls">连锁执行的SQL语句链表</param>

        /// <param name="prams">与sqls中每条SQL语句相对应的参数</param>

        /// <returns>

        /// int --> 执行成功,返回执行第一条语句所插入的一条记录的ID值。

        ///     --> 执行失败,返回-1。

        /// </returns>

        public int ExecuteReturnID(string sqlOne, SqlParameter[] pramsOne, ArrayList sqls, ArrayList prams, string callMethodName)

        {

            int id = -1; // 初始化id值为-1


            // 在第一条insert语句后加入select语句,以获得插入记录的ID值。

            sqlOne += ";select CAST( SCOPE_IDENTITY() AS INT) ";


            SqlCommand cmd = new SqlCommand();


            try

            {

                this.Open();


                cmd.Connection = this.connection;

                cmd.CommandText = sqlOne;


                for (int i = 0; i < pramsOne.Length; i++) // 插入对应参数。

                {

                    cmd.Parameters.Add(pramsOne[i]);

                }


                cmd.Transaction = connection.BeginTransaction(); // 事务开始


                id = (Int32)cmd.ExecuteScalar(); // 获得插入记录的ID。


                // 若sqls和prams不为空,则执行其中的操作。

                if (sqls != null && prams != null)

                {


                    // 检查参数中SQL语句sqls和参数prams是否对应,不对应则不执行操作,返回-1。

                    if (sqls.Count != prams.Count)

                    {

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值