ASP.NET、C#、MVC3、Code First项目
我正在尝试从Excel电子表格导入数据。我已经将所有单元格格式化为文本。
导入工作表中的样本行如下所示。
Account Card ThreeCode Route
04562954830287127 32849321890233127 183 154839254
04562954830287128 32849321890233128 233
04562954830287129 32849321890233129 082
04562954830287130 32849321890233130 428当我在debug中运行并向下钻取到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");发布于 2012-11-07 23:18:36
似乎没有一种方法可以让这一点始终如一。我想出的解决办法是将1000添加到ThreeCode工作簿的列中。然后,您可以将数据导入到数据集中。然后当数据被读出时,你只需去掉"1“前缀即可。下面是我的内联方法。
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位数的数据集数据。
发布于 2012-11-07 08:37:56
啊,是的,这就是卓越车手的乐趣。发生的情况是,它从数据类型的前十行开始确定,任何超出该格式的内容都将变为null。
解决方案是使用更强大的第三方驱动程序,通常需要一些成本,或者设置注册表项以完全采样所有行,而不是默认的8行。
请在此处查看TypeGuessRows http://www.connectionstrings.com/excel的链接
HKLM\Software\Wow5432Node\Microsoft\Jet\4.0\Engines\Excel将值TypeGuessRows设置为零
https://stackoverflow.com/questions/13261460
复制相似问题