Em uma leitura de uma planilha Excel (xlsx) o campo F4
está sendo reconhecido como um campo "double" o que ocasiona um erro com o valor do campo que apesar de numérico é uma chave que excede o tamanho do "double", se eu entro na no arquivo e converto
o a coluna toda para texto o problema está resolvido, mas o objetivo é que não haja interação do usuário com o arquivo físico, para isto preciso poder converter o campo
F4 no ato da importação para que não ocorra o problema e a consequente perda de informação.
Alguém teria alguma ideia de como proceder?
/**/
OleDbCommand cmd = new OleDbCommand("SELECT F1,F2,F3, CONVERT ( nvarchar(510) , F4) as F4,F5,F5,F6,F7,F8,F9 FROM [" + sheet + "]", conn);
/**/
string strConexao = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=\"Excel 12.0;HDR=Yes;IMEX=0\"", arquivo);
OleDbConnection conn = new OleDbConnection(strConexao);
conn.Open();
DataTable dt = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });
//****** Lista as informações das tabSheet encontradas no arquivo *********
DataTable dtCols = conn.GetSchema("Columns");
grdExibirDadosCampos.DataSource = dtCols;
grdExibirDadosCampos.AutoGenerateColumns = true;
//*************************************************************************
//Cria o objeto dataset para receber o conteúdo do arquivo Excel
DataSet output = new DataSet();
foreach (DataRow row in dt.Rows)
{
// obtem o noma da planilha corrente
string sheet = row["TABLE_NAME"].ToString();
// obtem todos as linhas da planilha corrente
// preciso que o funcionamento abaixo seja corrigido
OleDbCommand cmd = new OleDbCommand("SELECT F1,F2,F3,
CONVERT ( nvarchar(510) , F4) as F4,F5,F5,F6,F7,F8,F9 FROM [" + sheet + "]", conn);
cmd.CommandType = CommandType.Text;
// copia os dados da planilha para o datatable
DataTable outputTable = new DataTable(sheet);
output.Tables.Add(outputTable);
new OleDbDataAdapter(cmd).Fill(outputTable);
}