ACE.OLEDB를 통해 Excel의 sqlbulkcopy가 텍스트를 255 자로 자릅니다.

excel oledb sqlbulkcopy

문제

SqlBulkCopy를 사용하여 꽤 간단하게 가져 오기 :

string excelConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filePath + ";Extended Properties=\"Excel 12.0 Xml;HDR=YES;IMEX=1;\"";
using (OleDbConnection excelConnection = new OleDbConnection(excelConnectionString))
{
    excelConnection.Open();
    OleDbCommand cmd = new OleDbCommand("Select " + fileID.ToString() + " as [FileID], * from [Sheet1$] where [Text] IS NOT NULL", excelConnection);
    OleDbDataReader dReader = cmd.ExecuteReader();

    using (SqlBulkCopy sqlBulk = new SqlBulkCopy(ConfigurationManager.ConnectionStrings["DBConnection"].ConnectionString))
    {
        sqlBulk.DestinationTableName = "table_name";
        sqlBulk.ColumnMappings.Add(0, "FileID");
        sqlBulk.ColumnMappings.Add(4, "Author");
        sqlBulk.ColumnMappings.Add(3, "Title");
        sqlBulk.ColumnMappings.Add(1, "Body");
        sqlBulk.ColumnMappings.Add(2, "PublishedDate");
        sqlBulk.BulkCopyTimeout = 600;
        sqlBulk.WriteToServer(dReader);
    }
}

데이터는 아무런 문제가 없습니다. Body (nvarchar (max))에 매핑되는 첫 번째 열을 제외하고 255 자로 잘립니다. 주위를 둘러 보았고 레지스트리 설정 변경 과 관련된 해결 방법에 대한 참조를 발견했습니다. Excel의 기본값이지만 재부팅 후에도 도움이되지 않는 처음 8 행뿐만 아니라 전체 검사를 강제 실행하려면 값을 0으로 설정하십시오. 다른 아이디어를 찾고 있습니다. 고맙습니다.

인기 답변

나는 OLEDB 대신에 ODBC를 사용했고 더 이상 255 심볼로 값을 자르지 않습니다 :

OdbcConnection con = new OdbcConnection(@"Driver={Microsoft Excel Driver
(*.xls)};DBQ=c:\temp\testbook.xls");
OdbcCommand cmd = new OdbcCommand(@"SELECT * FROM [Workbook1$]");
cmd.Connection = con;
OdbcDataAdapter da = new OdbcDataAdapter(cmd);
DataSet ds = new DataSet();
da.Fill(ds);

당신은 2007 형식 드라이버를 사용하여 XLSX 파일에 액세스 할 수 있습니다 : .... Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)}



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