Excel을 사용하여 SQL Server로 SQL 대량 복사 (데이터 수정 포함)

excel sqlbulkcopy sql-server

문제

나는 SQLBulkCopySQLBulkCopy 읽고 있으며 Excel 문서에서 수천 개의 행을 SQL Server로 가져 오기 SQLBulkCopy 을 사용하고 싶습니다. 나는 자료를 수정하지 않고 그것을 직접하는 기사를 계속 읽는다. SQLBulkCopy 를 수행하기 전에 Excel 문서의 데이터에서 일부 수정 및 유효성 검사를 수행해야합니다. 이것을 할 수 있습니까? 오버로드로 인해 데이터를 수정하고 대형 DataTable 만들고 WriteToServer DataTable 을 가져올 수 있다고 가정합니다.

수락 된 답변

가져 오기 전에 유효성 검사 / 수정을 위해 반복 할 수있는 DataReader 또는 DataSet이 필요할 수 있습니다.

이 유틸리티가 도움이 될 것입니다 - http://exceldatareader.codeplex.com/


인기 답변

이것은 나를 위해 잘 작동합니다.

    public ActionResult Create(HttpPostedFileBase file)
    {
        string strConnection = ConfigurationManager.ConnectionStrings["dbconnection"].ConnectionString;

        //file upload path
        var fileName = Path.GetFileName(file.FileName);
        // store the file inside ~/App_Data/uploads folder
        var path = Path.Combine(Server.MapPath("~/App_Data/uploads"), fileName);
        file.SaveAs(path);

        //Create connection string to Excel work book
        string excelConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties=Excel 12.0;Persist Security Info=False";
        //Create Connection to Excel work book
        OleDbConnection excelConnection = new OleDbConnection(excelConnectionString);
        //Create OleDbCommand to fetch data from Excel
        excelConnection.Open();
        DataTable dt = new DataTable();

        dt = excelConnection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
        if (dt == null)
        {
            return null;
        }

        String[] excelSheets = new String[dt.Rows.Count];
        int t = 0;
        //excel data saves in temp file here.
        foreach (DataRow row in dt.Rows)
        {
            excelSheets[t] = row["TABLE_NAME"].ToString();
            t++;
        }

        OleDbConnection excelConnection1 = new OleDbConnection(excelConnectionString);

        string query = string.Format("SELECT * FROM [{0}]", excelSheets[0]);

        OleDbCommand cmd = new OleDbCommand(query, excelConnection);
        //excelConnection.Open();
        OleDbDataReader dReader;
        dReader = cmd.ExecuteReader();
        SqlBulkCopy sqlBulk = new SqlBulkCopy(strConnection);
        //Give your Destination table name
        sqlBulk.DestinationTableName = "[FSM].[DFS_Akustik]";
        sqlBulk.WriteToServer(dReader);
        excelConnection.Close();

        ViewBag.view_dfs_akustik = dbman.View_DFS_Akustik.ToList();
        return View();
    }


아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.