电子表格上传

时间:2010-07-09 10:35:18

标签: c# upload spreadsheet

通过C#上传电子表格时遇到一个奇怪的问题。

以下是我正在使用的电子表格示例:

JournalISSN
-----------
1650327
223956
1651781
9254927
3064530
9209964
924977X <- this is causing an error
3768716

我的上传代码(为简洁起见)

string connectionString = "Provider=Microsoft.Jet.OleDb.4.0; Data Source="
            + Server.MapPath("/admin/journals/upload.xls") + "; Extended Properties=\"Excel 8.0;HDR=YES;\"";

        DbProviderFactory factory = DbProviderFactories.GetFactory("System.Data.OleDb");

using (DbCommand Command = Connection.CreateCommand())
            {
                Command.CommandText = "SELECT [JournalISSN], JournalTitle, JournalDescription, ImpactFactor, Psychology "
                    + "FROM [Sheet1$]";

using (DbDataReader DataReader = Command.ExecuteReader())
{
     while (DataReader.Read())
     {
           Response.Write(string.IsNullOrEmpty(DataReader["JournalISSN"].ToString()) + "<br/>");
      }
}

现在发生了什么,当DataReader到达“JournalISSN”列中带有“X”的行时,它返回True(所以它为null / empty),所有其他列都返回false。所以问题似乎是每当一个列包含一个不是数字的字符时,它就不会在上传过程中被拉出来。

我尝试过的一些事情:

  • 将'X'移动到文本中的不同位置(即111X111)
  • 更改为其他字母
  • 删除单元格并重新开始
  • 将excel中的格式类型设置为“常规” - 应用于所有行。

对于为什么会发生这种情况有任何帮助/见解,我将不胜感激。

干杯,肖恩

1 个答案:

答案 0 :(得分:2)

您可能会在更改连接字符串以包含IMEX=1 extened属性时感到幸运。使用IMEX = 1将强制ADO将每个列视为字符串,而不是尝试识别数据类型。您可以找到更多详细信息here