여러 탭이있는 Excel 시트가 하나 있는데 C #을 사용하여이 데이터를 SQL Server에 삽입해야합니다.

asp.net c# sqlbulkcopy sql-server

문제

여러 시트가 포함 된 Excel 파일이 하나 있습니다. 모든 시트 이름은 SQL Server의 테이블 이름과 동일합니다. 이 Excel 시트의 데이터를 데이터베이스의 각 테이블에 삽입해야합니다.

SQL Server DB에는 13 개의 탭과 13 개의 테이블이 있습니다.

아래 코드로 한 시트의 데이터를 하나의 테이블에 삽입 할 수 있습니다.

String strConnection = "Data Source=.;Initial Catalog=<>;Integrated Security=True";

String excelConnString = String.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=\"Excel 12.0\"", filePath);

// Create Connection to Excel work book 
OleDbConnection conn = new OleDbConnection(excelConnString);

OleDbCommand cmd = new OleDbCommand();
cmd.Connection = conn;

OleDbDataAdapter da = new OleDbDataAdapter(cmd);
DataTable dt = new DataTable();

conn.Open();
DataTable dtSheet = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
string sheetName = dtSheet.Rows[0]["table_name"].ToString();
cmd.CommandText = "select * from [" + sheetName + "]";
da.SelectCommand = cmd;
da.Fill(dt);

using (OleDbDataReader dReader = cmd.ExecuteReader())
{
    using(SqlBulkCopy sqlBulk = new SqlBulkCopy(strConnection))
    {
        //Give your Destination table name 
        sqlBulk.DestinationTableName = "TABLE NAME IN SQL";
        sqlBulk.WriteToServer(dReader);

        conn.Close();
    }
}

모든 시트의 데이터를 어떻게 삽입합니까?

수락 된 답변

다음 작업을 수행해야합니다. 테이블 테이블의 각 행을 반복하면됩니다.

    ...
    DataTable dtSheet = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);

    // iterate each sheet
    foreach (System.Data.DataRow sheet in dtSheet.Rows)
    {
        string sheetName = sheet["table_name"].ToString();
        cmd.CommandText = "select * from [" + sheetName + "]";
        da.SelectCommand = cmd;
        da.Fill(dt);

        using (OleDbDataReader dReader = cmd.ExecuteReader())
        {
            using (SqlBulkCopy sqlBulk = new SqlBulkCopy(strConnection))
            {
                // Give your Destination table name.  Table name is sheet name minus any $
                sqlBulk.DestinationTableName = sheetName.Replace("$", "");
                sqlBulk.WriteToServer(dReader);

                conn.Close();
            }
        }
    }
}


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