我目前有一个处理程序,它将文件path和tabname作为一个excel文件,将文件处理成一个数据表,然后将表序列化成一个jsonstring以返回。 这是工作,直到我尝试处理大文件,然后我得到一个内存不足的例外。 我想这会减less内存使用,如果我没有加载到数据表第一,并直接加载到JSONstring。 但是,我一直无法find如何做到这一点的任何例子。 我可以直接从OleDbConnection串行到一个string? 怎么样? public void ProcessRequest(HttpContext context) { string path = context.Request["path"]; string tableNames = context.Request["tableNames"]; string connectionString = string.Empty; if (path.EndsWith(".xls")) { connectionString = String.Format(@"Provider=Microsoft.ACE.OLEDB.12.0; Data Source={0}; Extended Properties=""Excel 8.0;HDR=YES;IMEX=1""", path); } else if (path.EndsWith(".xlsx")) { connectionString = String.Format(@"Provider=Microsoft.ACE.OLEDB.12.0; Data Source={0}; Extended Properties=""Excel 12.0 Xml;HDR=YES;IMEX=1""", path); } DbProviderFactory factory = DbProviderFactories.GetFactory("System.Data.OleDb"); […]
我遇到的问题是数据适配器只查看每列中的第一行来确定数据types。 在我的情况下,第一列“SKU”是前500行的数字,然后我碰巧具有混合的数字和字母的SKU。 那么最后发生的是SKU列中的行是空白的,但是我仍然可以得到每列行的其他信息。 我相信这是连接string控制,并与我目前的设置,它应该工作,但事实并非如此。 连接string: conn.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Nick\Desktop\Pricing2.xlsx" + @";Extended Properties=""Excel 12.0 Xml;HDR=Yes;IMEX=1;ImportMixedTypes=Text;TypeGuessRows=0"""; ImportMixedTypes=Text;TypeGuessRows=0 应该是重要的关键字,看看0行,只是使用文本作为所有值的types。 我把这个“bandaid”放在电子表格的第一行是字母和数字的混合,特别是在我的查询中留下这一行。