从excal倒入到数据库

本文介绍如何从Excel文件批量导入数据到SQL Server数据库,包括使用事务确保数据一致性及通过三层架构实现业务逻辑分离的方法。

     //使用简单方式执行数据插入操作

            SqlConnection conn = new SqlConnection(strcon);
            SqlCommand cmd = conn.CreateCommand();
            conn.Open();
            //一定要在先打开数据库连接,然后在使用conn.BeginTransaction();开始事务
            //为数据库连接指定事物,表明在这个练级中执行的所有数据库的操作都使用事务机制,即要成功全成功,要失败全失败
            SqlTransaction tran = conn.BeginTransaction();
            //为命令对象指定事务,使用此命令对象执行的所有数据库操作都使用事务机制
            cmd.Transaction = tran;

            StringBuilder strSql = new StringBuilder();
            strSql.Append("insert into T_Student(");
            strSql.Append("classid,studentnum,studentname,mobile,qq)");
            strSql.Append(" values (");
            strSql.Append("@classid,@studentnum,@studentname,@mobile,@qq)");
            cmd.CommandText = strSql.ToString();
            SqlParameter[] parameters = {
     new SqlParameter("@classid", SqlDbType.VarChar,50),
     new SqlParameter("@studentnum", SqlDbType.VarChar,50),
     new SqlParameter("@studentname", SqlDbType.VarChar,50),
     new SqlParameter("@mobile", SqlDbType.VarChar,50),
     new SqlParameter("@qq", SqlDbType.VarChar,50)};
            try
            {
                using (Stream stream = File.Open(@"E:\优快云\学生相关\2010级\10级net3班信息表.xls", FileMode.Open, FileAccess.Read))
                {
                    HSSFWorkbook workbook = new HSSFWorkbook(stream);
                    HSSFSheet sheet = workbook.GetSheet("10级net3班联系表");
                    StringBuilder sb1 = new StringBuilder();
                    for (int i = 1; i <= sheet.LastRowNum; i++)
                    {
                        HSSFRow row = sheet.GetRow(i);
                        //cmd.Parameters.Clear();

                        for (int j = 0; j < row.LastCellNum; j++)
                        {
                            parameters[j].Value = row.GetCell(j).StringCellValue;
                        }
                        //将上面声明和实例化的SqlParameter的数组添加到cmd.SqlParameter集合中,其相当于便利SqlParameter数组中的每一个元素,然后使用cmd.SqlParameter.Add(parameters[index]),其实AddRange方式内部还是调用了cmd.SqlParameter.Add方法
                        cmd.Parameters.AddRange(parameters);
                        cmd.ExecuteNonQuery();
                    }
                    //如果上面的代码执行没有发生错误,就提交事务
                    tran.Commit();
                }
                conn.Close();
                conn.Dispose();
                MessageBox.Show("操作成功");
            }
            catch
            {
                //如果前面try{}中的任何一行代码出现错误,代码都会停止执行下面的代码,而跳到catch中
                //回滚事物,在try{}中出错之前执行的所有针对数据库的操作都会取消
                tran.Rollback();
                MessageBox.Show("操作失败");
            }

 

 

 //使用三层执行插入数据操作
            using (Stream stream = File.Open(@"E:\优快云\学生相关\2010级\10级net3班信息表.xls", FileMode.Open, FileAccess.Read))//建立流,指向要读取的文件
            {
                HSSFWorkbook workbook = new HSSFWorkbook(stream);
                HSSFSheet sheet = workbook.GetSheet("10级net3班联系表");
                Excel.BLL.T_Student bstudent = new Excel.BLL.T_Student();
                int result = 0;
                //便利所有行,LastRowNum是最后一行的索引,而不是总的行数,总的行数应该是LastRowNum+1,所以下面使用i<=sheet.LastRowNum或者i<LastRowNum+1

                for (int i = 1; i <= sheet.LastRowNum; i++)
                {
                    HSSFRow row = sheet.GetRow(i);
                    Excel.Model.T_Student mstudent = new Excel.Model.T_Student();
                    mstudent.classid = row.GetCell(0).StringCellValue;
                    mstudent.studentnum = row.GetCell(1).StringCellValue;
                    mstudent.studentname = row.GetCell(2).StringCellValue;
                    mstudent.mobile = row.GetCell(3).StringCellValue;
                    mstudent.qq = row.GetCell(4).StringCellValue;
                    result = bstudent.Add(mstudent);
                }
                if (result > 0)
                {
                    MessageBox.Show("操作成功");
                }
            }

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值