【发布时间】:2014-02-18 12:01:02
【问题描述】:
我必须在 Web 应用程序中使用 OleDB 读取 Excel 文件并将数据保存在数据库中。
使用 DataAdapter 或 OleDbDataReader 访问文件并读取它是有效的。我需要指定 IMEX=1 和 TypeGuessRows=0 因为文件中的数据有我需要解析的标题,但它们不在第一行。所以基本上,我需要阅读这些行,直到我遇到一个已知的标题,然后开始解析它之后的所有数据。
在第一列中,UPC 编号的值如下:5053366261702
但即使字段被读取为文本,OleDbDataReader 也会以科学的方式返回数字,如下所示:5.05337E+12
如果我不将这些行作为文本读取,则数字会正确返回,但标题会消失。
我添加了代码的重要部分。提前感谢您的帮助。
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
}
}
}
}
【问题讨论】:
标签: c# excel oledb number-formatting oledbconnection