用OleDB读取Excel文件以错误的格式返回UPC号码

我必须在Web应用程序中使用OleDB读取Excel文件,并将数据保存到数据库中。

访问文件并使用DataAdapter或OleDbDataReader读取它的作品。 我需要指定IMEX = 1和TypeGuessRows = 0,因为文件中的数据有我需要parsing的标题,但它们不在第一行。 所以基本上,我需要读取行,直到我打一个已知的标题,然后开始parsing所有的数据。

在第一列中有这样的值的UPC号码: 5053366261702但即使字段被读取为文本,OleDbDataReader以科学方式返回数字,如下所示: 5.05337E+12

如果我不以文本forms读取这些行,数字将被正确地返回,但标题将会消失。

我添加了代码的重要部分。 在此先感谢您的帮助。

 string conn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source='" + fileName + "';Extended Properties='Excel 12.0;HDR=No;IMEX=1;ImportMixedTypes=Text;TypeGuessRows=0'"; using (OleDbConnection objConn = new OleDbConnection(conn)) { objConn.Open(); var exceltables = objConn.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, new Object[] { null, null, null, "TABLE" }); var tablename = exceltables.Rows[0]["TABLE_NAME"]; using (OleDbCommand objCmdSelect = new OleDbCommand("SELECT * FROM [" + tablename + "]", objConn)) { using (OleDbDataReader reader = objCmdSelect.ExecuteReader()) { while (reader.Read()) { string abc = reader[0].ToString(); //do some parsing } } } } 

我find了适合我的解决scheme。 我现在用两个不同的连接string打开文件。

Provider=Microsoft.ACE.OLEDB.12.0;Data Source='filename.xlsx';Extended Properties='Excel 12.0;HDR=No;IMEX=1;ImportMixedTypes=Text;TypeGuessRows=0'

首先获取标题,当我find它们时,我保存行号并用IMEX = 0重新打开文件。

Provider=Microsoft.ACE.OLEDB.12.0;Data Source='filename.xlsx';Extended Properties='Excel 12.0;HDR=No;IMEX=0;ImportMixedTypes=Text;TypeGuessRows=0'

 string connHeaders = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source='" + fileName + "';Extended Properties='Excel 12.0;HDR=No;IMEX=1;ImportMixedTypes=Text;TypeGuessRows=0'"; string connData = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source='" + fileName + "';Extended Properties='Excel 12.0;HDR=No;IMEX=0;ImportMixedTypes=Text;TypeGuessRows=0'"; int dataStartRow = 0; string tablename = ""; #region Open file to find headers using (OleDbConnection objConn = new OleDbConnection(connHeaders)) { objConn.Open(); var exceltables = objConn.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, new Object[] { null, null, null, "TABLE" }); tablename = exceltables.Rows[0]["TABLE_NAME"].ToString(); using (OleDbCommand objCmdSelect = new OleDbCommand("SELECT * FROM [" + tablename + "] ", objConn)) { using (OleDbDataReader reader = objCmdSelect.ExecuteReader()) { while (reader.Read()) { if (reader[0].ToString().ToLower() == "upc") { for (int i = 0; i < reader.FieldCount; i++) { //find all necessary headers } break; } dataStartRow++; } } } } #endregion #region Open file again to read data using (OleDbConnection objConn = new OleDbConnection(connData)) { objConn.Open(); using (OleDbCommand objCmdSelect = new OleDbCommand("SELECT * FROM [" + tablename + "] ", objConn)) { using (OleDbDataReader reader = objCmdSelect.ExecuteReader()) { for (int i = 0; i < dataStartRow; i++) reader.Read(); while (reader.Read()) { //read the line to save it in Database } } } }