Excel数据导入到SQL Server数据库(C#)

I永超 2013-07-10 05:32:53
我想做一个ASP.net 程序fileupload控件上传EXcerl能够将里面指定的第二列和第四列数据全部导入到数据库中标头除外,而且要保证再上传excel表时间导入数据到数据库要保证数据不能重复,数据库只需要两个字段就行了,求帮帮忙呀!不知道怎么做???最好有源码?感激不尽...
...全文
203 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
h576514515 2013-07-11
  • 打赏
  • 举报
回复
dtExcel.Columns.Add("数据是否正确");
            dtExcel.Columns.Add("省ID");
            dtExcel.Columns.Add("市ID");
            dtExcel.Columns.Add("区ID");

            //获取省市区数据
            DataTable dtRegion = Customer.BlldtRegion();

            if (dtExcel.Rows.Count > 0)
            {
                #region

                foreach (DataRow dr in dtExcel.Rows)
                {
                    string strEror = string.Empty;

                    if (string.IsNullOrEmpty(dr["姓名"].ToString()))
                    {
                        strEror += "姓名不能为空" + ",";
                    }

                    if (!string.IsNullOrEmpty(dr["手机"].ToString()))
                    {
                        //验证手机格式
                        string reg = @"^1[3|4|5|8][0-9]\d{4,8}$";
                        bool isMobile = Regex.IsMatch(dr["手机"].ToString(), reg);

                        if (!isMobile)
                        {
                            strEror += "手机号码格式不对" + ",";
                        }
                    }

                    if (!string.IsNullOrEmpty(dr["电话"].ToString()))
                    {
                        //验证电话格式
                        string reg = @"^(0[0-9]{2,3}-)?([2-9][0-9]{6,7})+(-[0-9]{1,4})?$";
                        string regMobile = @"^1[3|4|5|8][0-9]\d{4,8}$";

                        bool isTelephone = Regex.IsMatch(dr["电话"].ToString(), reg);
                        bool isMobile = Regex.IsMatch(dr["电话"].ToString(), regMobile);

                        if (!isTelephone && !isMobile)
                        {
                            strEror += "电话号码格式不对" + ",";
                        }
                    }

                    if (string.IsNullOrEmpty(dr["手机"].ToString()) && string.IsNullOrEmpty(dr["电话"].ToString()))
                    {
                        strEror += "手机或电话不能为空" + ",";
                    }
                    else
                    {
                        Model_DX_Customer IsHaveCustomer = new Model_DX_Customer();
                        IsHaveCustomer.Mobile = dr["手机"].ToString();
                        IsHaveCustomer.Telephone = dr["电话"].ToString();
                        bool isHave = Customer.BllIsHave(IsHaveCustomer);
                        if (isHave)
                        {
                            strEror += "该客户已存在" + ",";
                        }
                        else
                        {
                            if (!string.IsNullOrEmpty(dr["手机"].ToString()))
                            {
                                DataRow[] drExcel = dtExcel.Select("手机='" + dr["手机"].ToString() + "' or 电话='" + dr["手机"].ToString() + "'");
                                if (drExcel.Length > 1)
                                {
                                    strEror += "该客户在Excel中出现重复" + ",";
                                }
                            }
                            if (!string.IsNullOrEmpty(dr["电话"].ToString()) && !strEror.Contains("Excel"))
                            {
                                DataRow[] drExcel = dtExcel.Select("手机='" + dr["电话"].ToString() + "' or 电话='" + dr["电话"].ToString() + "'");
                                if (drExcel.Length > 1)
                                {
                                    strEror += "该客户在Excel中出现重复" + ",";
                                }
                            }
                        }
                    }

                    if (!string.IsNullOrEmpty(dr["邮箱"].ToString()))
                    {
                        //验证电话格式
                        string reg = @"^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$";
                        bool isEmail = Regex.IsMatch(dr["邮箱"].ToString(), reg);

                        if (!isEmail)
                        {
                            strEror += "邮箱号码格式不对" + ",";
                        }
                    }

                    if (!string.IsNullOrEmpty(dr["区"].ToString()))
                    {
                        DataRow[] drRegion = dtRegion.Select("Name='" + dr["区"].ToString() + "'");

                        if (drRegion.Length > 0)
                        {
                            dr["区ID"] = drRegion[0]["ID"].ToString();
                            DataRow[] drDistrictID = dtRegion.Select("ID=" + drRegion[0]["FID"].ToString());
                            dr["市ID"] = drDistrictID[0]["ID"].ToString();
                            DataRow[] drProvinceID = dtRegion.Select("ID=" + drDistrictID[0]["FID"].ToString());
                            dr["省ID"] = drProvinceID[0]["ID"].ToString();
                        }
                        else
                        {
                            strEror += "系统中不存在该区,";
                        }
                    }

                    if (!string.IsNullOrEmpty(dr["市"].ToString()))
                    {
                        DataRow[] drRegion = dtRegion.Select("Name='" + dr["市"].ToString() + "'");

                        if (drRegion.Length > 0)
                        {
                            dr["市ID"] = drRegion[0]["ID"].ToString();
                            DataRow[] drProvinceID = dtRegion.Select("ID=" + drRegion[0]["FID"].ToString());
                            dr["省ID"] = drProvinceID[0]["ID"].ToString();
                        }
                        else
                        {
                            strEror += "系统中不存在该市,";
                        }
                    }

                    if (!string.IsNullOrEmpty(dr["省"].ToString()))
                    {
                        DataRow[] drRegion = dtRegion.Select("Name='" + dr["省"].ToString() + "'");

                        if (drRegion.Length > 0)
                        {
                            dr["省ID"] = drRegion[0]["ID"].ToString();
                        }
                        else
                        {
                            strEror += "系统中不存在该省,";
                        }
                    }

                    dtRegion.Dispose();

                    if (string.IsNullOrEmpty(strEror))
                    {
                        dr["数据是否正确"] = "数据正确";

                        //判断是否是保存
                        if (isSave)
                        {
                            Model_DX_Customer ModelCustomer = new Model_DX_Customer();
                            ModelCustomer.CustomerName = dr["姓名"].ToString();
                            ModelCustomer.Sex = dr["性别"].ToString();
                            ModelCustomer.Province = string.IsNullOrEmpty(dr["省ID"].ToString()) ? 0 : Convert.ToInt32(dr["省ID"].ToString());
                            ModelCustomer.City = string.IsNullOrEmpty(dr["市ID"].ToString()) ? 0 : Convert.ToInt32(dr["市ID"].ToString());
                            ModelCustomer.District = string.IsNullOrEmpty(dr["区ID"].ToString()) ? 0 : Convert.ToInt32(dr["区ID"].ToString());
                            ModelCustomer.Address = dr["地址"].ToString();
                            ModelCustomer.Company = dr["单位"].ToString();
                            ModelCustomer.Mobile = dr["手机"].ToString();
                            ModelCustomer.Telephone = dr["电话"].ToString();
                            ModelCustomer.Email = dr["邮箱"].ToString();
                            ModelCustomer.Flag = -1;
                            ModelCustomer.IsHignSeas = 0;
                            lisCustomer.Add(ModelCustomer);
                        }
                    }
                    else
                    {
                        dr["数据是否正确"] = strEror.Substring(0, strEror.Length - 1);
                    }
                }

                #endregion

                BaoxianList.DataSource = dtExcel;
                BaoxianList.DataBind();

                operate.Visible = true;
                Table.Visible = false;
                tablePutInSource.Visible = true;
            }
        }
        catch (Exception ex)
        {
            WebUility.alert(ex.Message);
        }
    }
h576514515 2013-07-11
  • 打赏
  • 举报
回复
这是我做的EXCEL导入方法有些代码应该用不到你可以慢慢看
/// <summary>
    /// 将Excel的数据显示到Repeater中
    /// </summary>
    /// <param name="filename"></param>
    /// <param name="isSave">是否为保存</param>
    public void GetData(string filename, bool isSave)
    {
        try
        {
            //连接Excel字符串
            OleDbConnection _ExcelConn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath("../ITMAN_DianXiao/Excel/" + filename) + ";Extended Properties=\"Excel 8.0;HDR=YES;IMEX=1\"");

            _ExcelConn.Open();
            DataTable _Table = _ExcelConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "Table" });

            OleDbDataAdapter adp = new OleDbDataAdapter("select * from [Sheet1$]", _ExcelConn);
            DataSet dsExcel = new DataSet();
            adp.Fill(dsExcel);
            _ExcelConn.Close();

            if (_Table.Rows[0]["TABLE_NAME"].ToString().Equals("Sheet1"))
            {
                WebUility.alert("Excel中没有Sheet1页签,请下载模板!");
                return;
            }

            DataTable dtExcelImport = dsExcel.Tables[0];

            #region 判断是否存在所需的列
            string strIsColumns = string.Empty;

            if (!dtExcelImport.Columns.Contains("姓名"))
            {
                strIsColumns += "该Excel中没有姓名列\\r\\n";
            }
            if (!dtExcelImport.Columns.Contains("性别"))
            {
                strIsColumns += "该Excel中没有性别列\\r\\n";
            }
            if (!dtExcelImport.Columns.Contains("省"))
            {
                strIsColumns += "该Excel中没有省列\\r\\n";
            }
            if (!dtExcelImport.Columns.Contains("市"))
            {
                strIsColumns += "该Excel中没有市列\\r\\n";
            }
            if (!dtExcelImport.Columns.Contains("区"))
            {
                strIsColumns += "该Excel中没有区列\\r\\n";
            }
            if (!dtExcelImport.Columns.Contains("地址"))
            {
                strIsColumns += "该Excel中没有地址列\\r\\n";
            }
            if (!dtExcelImport.Columns.Contains("单位"))
            {
                strIsColumns += "该Excel中没有单位列\\r\\n";
            }
            if (!dtExcelImport.Columns.Contains("手机"))
            {
                strIsColumns += "该Excel中没有手机列\\r\\n";
            }
            if (!dtExcelImport.Columns.Contains("电话"))
            {
                strIsColumns += "该Excel中没有电话列\\r\\n";
            }
            if (!dtExcelImport.Columns.Contains("邮箱"))
            {
                strIsColumns += "该Excel中没有邮箱列\\r\\n";
            }
            if (!string.IsNullOrEmpty(strIsColumns))
            {
                strIsColumns += "请下载模板";

                WebUility.alert(strIsColumns);
                return;
            }
            #endregion

            #region
            DataTable dtExcel = dtExcelImport.Clone();
            dtExcel.Columns["手机"].DataType = typeof(string);
            dtExcel.Columns["电话"].DataType = typeof(string);
            foreach (DataRow drExcelImport in dtExcelImport.Rows)
            {
                DataRow drExcel = dtExcel.NewRow();
                drExcel["姓名"] = drExcelImport["姓名"].ToString();
                drExcel["性别"] = drExcelImport["性别"].ToString();
                drExcel["省"] = drExcelImport["省"].ToString();
                drExcel["市"] = drExcelImport["市"].ToString();
                drExcel["区"] = drExcelImport["区"].ToString();
                drExcel["地址"] = drExcelImport["地址"].ToString();
                drExcel["单位"] = drExcelImport["单位"].ToString();
                drExcel["手机"] = drExcelImport["手机"].ToString();
                drExcel["电话"] = drExcelImport["电话"].ToString();
                drExcel["邮箱"] = drExcelImport["邮箱"].ToString();
                dtExcel.Rows.Add(drExcel);
            }
            #endregion
I永超 2013-07-11
  • 打赏
  • 举报
回复
具体代码怎么写呀
h576514515 2013-07-11
  • 打赏
  • 举报
回复
还有你要避免重复不仅仅要避免数据库的数据重复,还有避免EXCEL中的数据重复
h576514515 2013-07-11
  • 打赏
  • 举报
回复
你要想避免重复就直接将EXCEL中的数据取出来,然后查询数据,看看能不能查的出来,最后将正确的数据保存到数据库中啊。这应该很简单啊
  • 打赏
  • 举报
回复
I永超 2013-07-10
  • 打赏
  • 举报
回复
网上有很多但是它不能杜绝重复的数据,能写一个例子出来吗
人生导师 2013-07-10
  • 打赏
  • 举报
回复
这个实现方式有很多了,具体看看这个链接:http://www.google.ee/search?q=site%3Acnblogs.com%20Excel%E6%95%B0%E6%8D%AE%E5%AF%BC%E5%85%A5%E5%88%B0SQL%20Server%E6%95%B0%E6%8D%AE%E5%BA%93
I永超 2013-07-10
  • 打赏
  • 举报
回复
具体怎么写呀???求代码呀
好基友一被子 2013-07-10
  • 打赏
  • 举报
回复
还想要源码。。。 把excel读取到datatable中再插入数据库
I永超 2013-07-10
  • 打赏
  • 举报
回复
有会的吗???

110,532

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧