Tag: ado.net

ado net – 导入excel数据 – 缺less数据

乍一看我遇到了和以前一样的问题,我发现了很多关于我的问题的问题和答案,但是没有一个能够帮助我。 我使用ADO NET在NET中执行从MS Excel文件(文件XLS)导入。 该文件包含在同一列中的混合types:数字和文本,以及众所周知的问题 – 文本格式不被识别,数据丢失。 我使用以下连接string与推荐的参数: string strConnectionString = string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=\"Excel 8.0;HDR=NO;IMEX=1;TypeGuessRows=0;ImportMixedTypes=Text\";", pathname); 这是我的代码: OleDbConnection sqlConn = new OleDbConnection(this.strConnectionString); sqlConn.Open(); OleDbDataAdapter sqlAdapter = new OleDbDataAdapter(); string sql = "SELECT * FROM [" + sheetName + "]"; OleDbCommand selectCMD = new OleDbCommand(sql, sqlConn); sqlAdapter.SelectCommand = selectCMD; DataTable dt = new DataTable(sheetName); sqlAdapter.Fill(dt); 我在NET […]

如何设置列的长度和types

我正在从xls/xlsx文件读取到一个DataSet 。 string connstring; if (currFileExtension == ".xlsx") { connstring = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + currFilePath + ";Extended Properties='Excel 8.0;HDR=NO;IMEX=1';"; } else { connstring = "Provider=Microsoft.JET.OLEDB.4.0;Data Source=" + currFilePath + ";Extended Properties='Excel 8.0;HDR=NO;IMEX=1';"; } using (OleDbConnection conn = new OleDbConnection(connstring)) { conn.Open(); DataTable sheetsName = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "Table" }); //Get All […]

服务/消费OData接口的entity framework的替代scheme

我正在研究如何build立一个OData接口到我们的数据库。 我希望能够将我们的数据库中的数据提取到Excel中作为开始。 最后,我想让Excel运行查询并通过HTTP从远程客户端获取数据,包括身份validation等。 到目前为止,我已经使用Visual Studio中的ADO.NET实体数据模型向导build立了一个工作(摇摇晃晃)的原型,VSTO创build了一个testingExcel工作表,其中包含一个从该ADO.NET接口中提取的button。 这到目前为止工作正常,我可以通过由ADO.NET EDM向导创build的实体/对象使用Linq查询数据库。 但是,我已经开始遇到这种方法的一些问题。 我一直在发现entity framework很难工作(事实上,也很难研究解决scheme,因为有很多关于它和它的旧版本的chaff)。 一个例子是我无法弄清楚如何设置向导为我的模式生成的DataServiceContext对象上的SQL命令超时(而不是HTTP请求超时),但这不是我的问题的关键。 我真正的问题是,如果我想使用OData作为我的接口标准,我坚持与entity framework? 是否还有其他解决scheme(最好是开放源代码)可以设置,服务和使用OData接口,并且比entity framework更容易处理,也更less膨胀? 我已经看到提及NHibernate作为替代,但大多数我看到的比较线程是几年。 现在还有其他的select吗? 非常感谢!

使用ADO.NET创buildExcel工作表(OleDb) – >支持哪些DataTypes?

我尝试使用ADO.NET(OleDb)创build一个Excel(2003)工作表。 我能够用OleDbCommand创build工作表: var cnnString = "Provider=Microsoft.Jet.OLEDB.4.0;…"; var cnn = new OleDbConnection(cnnString); var cmd = cnn.CreateCommand(); cnn.Open(); cmd.CommandText = "CREATE TABLE MySheet (ID char(255), Field1 char(255))"; cmd.ExecuteNonQuery(); 这按预期工作。 在这里,我的问题:在CREATE TABLE命令中,Excel支持哪些DataTypes(如char(255))? 我没有谷歌,但没有find任何文件或提示。 谢谢你的帮助。

如何在Excel中使用ADO.NET托pipe提供程序?

我有一个ADO.NET托pipe数据提供程序,它在DbProviderFactory中的machine.config中注册 – 它可以从Analysis Services中使用,所以我知道它是正确注册的。 但是,我需要能够从Excel中查询托pipe提供程序,但托pipe提供程序不会显示为数据链接属性| 所有Ole Db提供商。 如何让ADO.NET托pipe数据提供程序出现在那里,还是有另一种我需要使用的技术? 在此先感谢,Eli。

在ADO.NET 4.0中处理多个连接到多个Excel文件的正确方法是什么?

我有一段使用VS 2005编写的代码,可以在运行.NET 2.0的计算机上正常工作,但是在运行.NET 4.0的计算机上发生严重的崩溃。 造成问题的hte代码部分是对DataAdapter的Fill()方法的调用。 代码如下所示: private void button_Click(object sender, EventArgs e) { DataTable dt1 = new DataTable(); string connectionString = … //connects to excelfile1.xls string selectCommand = "SELECT * FROM [Sheet1$]"; using(OleDbDataAdapter adapter = new OleDbDataAdapter(selectCommand, connectionString)) { adapter.SelectCommand.Connection.Open(); adapter.Fill(dt1); } DataTable dt2 = new DataTable(); connectionString = … //connects to excelfile2.xls using(OleDbDataAdapter adapter […]

为什么一个ADO.NET Excel查询工作,而另一个不工作?

我正在开发一个SharePoint工作stream程,第一步要求我打开一个Excel工作簿并阅读两件事:一系列类别(来自范围足够方便的Categories )和一个类别索引(在命名范围CategoryIndex )。 Categories是大约100个单元格的列表,而CategoryIndex是单个单元格。 我正在使用ADO.NET来查询工作簿 string connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source=" + temporaryFileName + ";" + "Extended Properties=\"Excel 12.0 Xml;HDR=YES\""; OleDbConnection connection = new OleDbConnection(connectionString); connection.Open(); OleDbCommand categoryIndexCommand = new OleDbCommand(); categoryIndexCommand.Connection = connection; categoryIndexCommand.CommandText = "Select * From CategoryIndex"; OleDbDataReader indexReader = categoryIndexCommand.ExecuteReader(); if (!indexReader.Read()) throw new Exception("No category selected."); object indexValue = […]

使用WHERE子句的OLE CALL到Excel

我正在修复一个C#项目,该项目使用带有数据定义的Excel工作表来创buildSQL Server中批量插入所使用的.fmt文件。 我的问题是,Excel文件有时底部有空白行,我正在处理的C#parsing器将检测到的行数超过实际行数的containsint数据定义。 因此,fmt文件在其第二行具有较大数量的行,批量插入到达底部并尝试读取时会引发exception。 例如,只有50行数据和50空白行。 fmt文件的第二行有100(第一行是SQL Server版本)。 第3行到第52行是数据定义的50行。 批量插入尝试到达第53行时,它会返回一些列exception。 C#parsing器使用Ace OleDB 12连接到Excel 97格式文件。 SQL是: var commandText = string.Format("SELECT * FROM [{0}$]", SpreadSheetName); 我试图添加一个WHERE子句的SQL代码,只select非空的“A”列的行,但这是行不通的。 SELECT * FROM [{0}$] WHERE [A] <> '' 有没有一种方法可以通过某些SQL代码来增强命令文本,以仅在符合某些条件的情况下从Excel中提取数据行?

有没有更好的方法来指出Excel中的“空值”?

我有一个Excel 2007工作簿,其中包含我使用ADO.NET导入到DataTable对象中的数据表。 通过一些实验,我设法find了两种不同的方式来表明一个单元应该被ADO.NET视为“空”: 这个单元格是完全空白的。 单元格包含#N/A 不幸的是,这两个都是有问题的: Excel中的大部分数据列都是通过公式生成的,但在Excel中无法生成公式导致完全空白的单元格。 只有一个完全空白的单元格才会被认为是空的(一个空string将不起作用)。 任何计算为#N/A公式(无论是由于实际查找错误还是由于使用了NA()函数) 将被视为空。 这似乎是理想的解决scheme,直到我发现Excel工作簿必须打开这个工作。 只要closures工作簿,OLEDB就会突然开始将所有#N #N/A作为string。 这会导致填充DataTable时抛出如下exception: inputstring的格式不正确。 无法在值列中存储<#N / A>。 预期的types是Int32。 问题:如何通过Excel公式指示空值, 而不必在填充DataTable时打开工作簿? 或者可以做些什么来使#N/A值即使在工作簿closures时也被认为是空值? 万一重要,我的连接string是使用以下方法build立的: var builder = new OleDbConnectionStringBuilder { Provider = "Microsoft.ACE.OLEDB.12.0", DataSource = _workbookPath }; builder.Add("Extended Properties", "Excel 12.0 Xml;HDR=Yes;IMEX=0"); return builder.ConnectionString; ( _workbookPath是工作簿的完整path)。 我已经尝试IMEX=0和IMEX=1但没有区别。

该字段太小,无法接受您尝试添加的数据量。 有没有人从ADO.NET得到这个错误?

从数据集更新Excel文件似乎工作正常。 但是,如果我有超过255个字符的文本,那么我会得到上面的错误。 有没有其他人得到这样的错误? 你如何解决它? 我一直在这个工作了几个小时,我没有得到任何地方。 我试图搞乱连接string和更改registry设置,但没有运气。