日期:2014-05-20  浏览次数:20810 次

excel 万级别的数据 导入sqlserver
我是用程序写的导入
C# code
  protected void btnOK_Click(object sender, EventArgs e)
    {
        if (fuPath.HasFile)
        {
            string path = fuPath.PostedFile.FileName.ToString();
            string[] pathArray = path.Split('\\');
            string name = pathArray[pathArray.Length - 1];
            string endName = DateTime.Now.ToString("yyMMddHHmmss") + name;
            string endPath = HttpContext.Current.Server.MapPath("~/Excel/") + endName;
            fuPath.PostedFile.SaveAs(endPath);

            DataSet ds = ExcelToDataSet(endPath);
            if (SqlHelper.HasRow(ds))
            {
                string error = "";

                #region for
                for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
                {
                    #region Check
                    string typeNo = ds.Tables[0].Rows[i]["xx"].ToString().Trim();
                    string typeName = ds.Tables[0].Rows[i]["ccc"].ToString().Trim();
                    string pTypeNo = ds.Tables[0].Rows[i]["dd"].ToString().Trim();
                    string pTypeName = ds.Tables[0].Rows[i]["eee"].ToString().Trim();
                    string remark = ds.Tables[0].Rows[i]["fff"].ToString().Trim();

                    if (typeNo.Length > 100)
                        typeNo = typeNo.Substring(0, 100);
                    if (typeName.Length > 100)
                        typeName = typeName.Substring(0, 100);
                    if (pTypeName.Length > 50)
                        pTypeName = pTypeName.Substring(0, 50);
                    if (remark.Length > 100)
                        remark = remark.Substring(0, 100);
                    #endregion

                    #region Linq
                    TabAssetsType p = db.TabAssetsType.FirstOrDefault(c => c.TypeNo == typeNo);
                    if (p == null)
                    {
                    
                        TabAssetsType tabAsstype = new TabAssetsType();   
                        tabAsstype.TypeNo = FormatCom.String(typeNo);
                        tabAsstype.TypeName = FormatCom.String(typeName);
                        tabAsstype.PTypeNo = FormatCom.String(pTypeNo);
                        tabAsstype.PTypeName = FormatCom.String(pTypeName);
                        tabAsstype.IsState = 0;
                        tabAsstype.Remark = FormatCom.String(remark);
                    
                        db.TabAssetsType.InsertOnSubmit(tabAsstype);
                    }
                    else
                    {   
                        //error += @"xx(" + typeNo + ")已存在!\r\n";
                    }
                    #endregion
                }
                #endregion

                try
                {
                    db.SubmitChanges();
                    db.ExecuteCommand("update TabAssetsType set TypeNo = TypeNo");
                    error += @"导入成功!\r\n";
                    MessageBox(error);
                }
                catch (Exception ex)
                {
                    MessageBox("导入失败!");
                }

              
            }
            else
            {
                MessageBox("该文件中没有xx信息,请检查模板是否正确!");
                return;
            }
        }
        else
        {
            MessageBox("请选择要导入的文件!");
            return;
        }
    }

    public DataSet ExcelToDataSet(string Path)
    {
        DataSet ds = new DataSet();
        try
        {
            string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + Path + ";" + "Extended Properties=Excel 8.0;";
            OleDbConnection conn = new OleDbConnection(strConn);
            conn.Open();
            OleDbDataAdapter myCommand = new OleDbDataAdapter("select * from [Sheet1$]", strConn);
            myCommand.Fill(ds, "TabAssetsType");
            return ds;
        }
        catch
        {
            MessageBox("支持Excel2003的导入不支持2007!");
          
        }
        return ds;

    }