导入3位数字段,前导零

时间:2012-11-07 00:16:36

标签: asp.net-mvc-3 c#-3.0 import-from-excel oledbdataadapter

ASP.NET,C#,MVC 3,Code First项目

我正在尝试从Excel电子表格导入数据。我已将所有单元格格式化为文本 导入工作表中的示例行如下所示。

Account             Card               ThreeCode  Route  
04562954830287127   32849321890233127  183        154839254 
04562954830287128   32849321890233128  233
04562954830287129   32849321890233129  082
04562954830287130   32849321890233130  428

当我在调试中运行并向下钻取到ds DataSet时,Account和Card列将作为字符串导入,3-Digit和Route列将作为双精度导入。问题出现在数据行3中以0(082)开头的3位数字。它作为System.DBNull导入并为空。我需要能够导入带有前导零的3位数代码。有没有办法强制导入是所有字符串或另一种方法来解决这个问题?我在网上搜索并找不到解决方案。这将从浏览器运行,因此无法与本地计算机上的注册表,dll或ini文件进行任何操作。导入代码如下。提前感谢您的帮助。

public ActionResult ExcelToDS(string Path = "C;\File.xls")
{ 
  string strConn = "Provider= Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + Path + "; " + "Extended Properties=Excel 8.0;";

  OleDbConnection conn = new OleDbConnection(strConn);
  conn.Open(); string strExcel = "";
  OleDbDataAdapter myCommand = null;
  DataTable dt = new DataTable();
  strExcel = "select * from [Import$]";
  DataSet ds = null; 
  myCommand = new OleDbDataAdapter(strExcel, strConn);
  ds = new DataSet(); myCommand.Fill(ds, "table1");

2 个答案:

答案 0 :(得分:1)

啊,是的excel驱动程序的乐趣。发生的事情是它从数据类型的第一个说十行做出确定,该格式之外的任何内容都变为空。

解决方案是使用更强大的第三方驱动程序,通常会花费某些成本,或者设置注册表项以完全采样所有行而不是默认值8。

查看TypeGuessRows的链接 http://www.connectionstrings.com/excel

HKLM \ SOFTWARE \ Wow5432Node \微软\喷气\ 4.0 \发动机\ EXCEL 将值TypeGuessRows设置为零

答案 1 :(得分:0)

似乎没有办法让这项工作始终如一。我想到的工作是在Excel工作簿中的ThreeCode列中添加1000。然后,您就可以将数据导入数据集。然后,当读出数据时,您只需剥离“1”preifx。这是我的内联方法。

public static string last3(this string instring)
{ int len = instring.Length - 3; string outstring = instring.Substring(len, 3); return outstring; }

您可以在代码中调用:

card.3Dig = code.last3();

'card'和'3dig'是要填充的类和字段。 'code'是4位数据集数据。