Dataset 批量录入

/// <summary>
        /// 更新DataSet数据至数据库中,注意数据表结构必须与Exel结构相同
        /// </summary>
        /// <param name="ds">ds盛放从Excel表中读取的数据</param>
        /// <param name="sql">用于查询数据库记录的语句</param>
        /// <returns></returns>
        public static bool UpdataDataSet(DataSet ds, string sql)
        {
            using (OleDbConnection connection = new OleDbConnection(PubConstant.ConnectionString))
            {
                connection.Open();
                DataTable tempDT = new DataTable();
                //创建适配器
                OleDbDataAdapter dap = new OleDbDataAdapter(sql, connection);
                //创建 用于更改与关联数据库的单表命令
                OleDbCommandBuilder cb = new OleDbCommandBuilder(dap);
                //以下两处的[ ] 最好加上,否则可能会出现莫名的错误,就相当于给字段名、或表名加[]
                cb.QuotePrefix = "[";
                cb.QuoteSuffix = "]";
                try
                {
                    //装载,根据SQL语句从数据库里读来数据,
                    dap.Fill(tempDT);
                    //设置DataTable主键字段
                    tempDT.PrimaryKey = new DataColumn[] { tempDT.Columns["勘验号"] };
                    //取DataSet中表1的数据,此处的dsTable是用于盛放从Excel表中读出的数据
                    DataTable dsTable = ds.Tables[0];

                    //遍历dsTable中的每一行数据
                    foreach (DataRow dr in dsTable.Rows)
                    {
                        //在tempDT中查找数据库中是否已经存在该条数据
                        DataRow modyRow = tempDT.Rows.Find(dr["勘验号"]);
                        //如果数据库已经存在该行,则修改记录,不进行插入
                        if (modyRow != null)
                        {
                            //设置该行记录为“已修改”状态,次操作必须。
                            tempDT.Rows.Find(dr["勘验号"]).SetModified();
                            //重新给该记录赋值
                            tempDT.Rows.Find(dr["勘验号"]).ItemArray = dr.ItemArray;
                        }
                        else
                        {
                            //新增
                            tempDT.Rows.Add(dr.ItemArray);
                        }
                    }
                    //执行操作,这样就不用写SQL语句,它自己会操作
                    dap.Update(tempDT);
                    return true;
                }
                catch (Exception ex)
                {
                    Console.Write(ex.Message);
                    return false;
                }
            }
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值