通过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。所以问题似乎是每当一个列包含一个不是数字的字符时,它就不会在上传过程中被拉出来。
我尝试过的一些事情:
对于为什么会发生这种情况有任何帮助/见解,我将不胜感激。
干杯,肖恩
答案 0 :(得分:2)
您可能会在更改连接字符串以包含IMEX=1
extened属性时感到幸运。使用IMEX = 1将强制ADO将每个列视为字符串,而不是尝试识别数据类型。您可以找到更多详细信息here。