Tag: oledb

Microsoft Jet oledb与excel的连接丢失了公式

我有一个数据集,我使用Microsoft Jet 4.0 Oledb提供程序将它的值写入excel文件。 我想把超链接放到excel中,为此我在DS中写了“= HYPERLINK(” http://www.abc.org/x.pdf “)”然后将它写入excel。 但是当打开excel时,它会在公式前面加上’(quote /撇号),并且它会以文本forms出现,而不是链接。 你能帮我删除那个引用,以便我的excel文件有超链接而不是文本吗? 我需要使用Microsoft Jet 4.0提供程序(不是excel组件),因为客户端计算机可能会或可能不会在他的计算机上安装MS-Excel。

使用Microsoft Jet OLEDB对CSV进行列限制

我正在从包含大约350列的CSV导入数据。 此CSV导入已修复,我完全无法控制它。 如果我尝试在Excel 2003中打开CSV,则由于列限制为255(IV),它仅部分加载。 当我使用OleDb和Microsoft.Jet.OLEDB.4.0将CSV加载到DataSet时,它也只显示255列。 更糟糕的是,当尝试访问这些255列中的某些列的数据时,它显示不正确的数据并且不断地分割这些值。 如果我在Excel中打开CSV,让它截断数据并重新保存,我的导入工作正常。 我的问题是,有没有其他人遇到Jet.OLEDB提供商的这种限制。 如果是,是否有问题的解决方法? 如果不是,是否有可用的替代解决方案可以加载如此大的CSV? 注意:这不是一次性任务,我需要为最终用户提供一个浏览/上传按钮,以便在需要时执行此导入。

多步OLE DB操作生成错误

我正在从Netezza数据源运行一个简单的FillSchema dss = new DataSet(); ad = new OleDbDataAdapter(cmd); ad.SelectCommand = new OleDbCommand(“SELECT * FROM ” + objTable.name); ad.SelectCommand.Connection = cn; ad.FillSchema(dss, SchemaType.Source); 我收到以下错误: System.Data.OleDb.OleDbException: Multiple-step OLE DB operation generated errors. Check each OLE DB status value, if available. No work was done. at System.Data.OleDb.OleDbServicesWrapper.GetDataSource(OleDbConnectionString constr, DataSourceWrapper& datasrcWrapper) at System.Data.OleDb.OleDbConnectionInternal..ctor(OleDbConnectionString constr, OleDbConnection connection) at System.Data.OleDb.OleDbConnectionFactory.CreateConnection(DbConnectionOptions […]

为什么通过OleDb在Access数据库中调用我的UPDATE查询不起作用?

更新2:我解决了这个,看到我的答案。 我使用OleDb从C#调用Microsoft Access数据库中的查询,但我无法让我的更新查询工作。 不会引发任何错误,但数据库中不会保留更新。 任何人都可以对此有所了解吗? 数据库中的SQL查询: UPDATE tableName SET tableName.LastPolledDtg = LastPolledDtg WHERE tableName.key = ID; C#: OleDbCommand command = new OleDbCommand(); SetCommandType(command, CommandType.StoredProcedure, “NameOfQueryInAccessDatabase”); AddParamToSQLCmd(command, “@ID”, OleDbType.Integer, 4, ParameterDirection.Input, id); AddParamToSQLCmd(command, “@LastPolledDtg”, OleDbType.Date, 4, ParameterDirection.Input, DateTime.Now); using (OleDbConnection connection = new OleDbConnection(“connectionString”)) { command.Connection = connection; connection.Open(); result = command.ExecuteNonQuery(); } 连接字符串: “Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\Documents […]

我没有关闭以前的DataReader,但在哪里?

我已经更改了以前的代码,所以我没有使用’使用’。 它工作得更早,不同类中的代码基本上代表相同的东西,但它的工作。 我现在已经盯着它看了2个小时,我无法弄清问题可能出在哪里。 我只有一个阅读器,但每次我使用DisplayFileContent方法时都会收到错误:错误: There is already an open DataReader associated with this command which must be closed first. // May be public so we can display // content of file from different forms. public void DisplayFileContent(string filePath) { // Counting all entries. int countEntries = 0; // Encrypting/Decrypting data. EncryptDecrypt security = new EncryptDecrypt(); […]

没有MSysObject错误的读取权限

我试图通过OleDb连接到MS Access数据库(.mdb)。 我的疑问是 SELECT * FROM ListQueries 这让我错误 SQL执行错误。 执行的SQL语句:SELECT * FROM ListQueries错误源:Microsoft JET数据库引擎错误消息:无法读取记录; 没有’MSysObjects’的读取权限。 然后我尝试了这个答案 ,但没有帮助。 然后我看到另一个答案说这样做。 strDdl = “GRANT SELECT ON MSysObjects TO Admin;” CurrentProject.Connection.Execute strDdl 我不知道如何在我的web project实现它。 按照@HansUp的建议写这样的东西 或者,如果从OleDb连接到Access数据库运行它,它应该从c#开始工作 代码是, OleDbConnection con; using (con = new OleDbConnection(Connection.connectionString())) { con.Open(); using (var com = new OleDbCommand(“GRANT SELECT ON MSysObjects TO Admin”, con)) { […]

获取OleDbCommandBuilder生成的SQL命令

我使用OleDbDataAdapter和OleDbCommandBuilder用数据库内容填充DataSet对象,然后根据我在DataSet中所做的更改来更新数据库。 问题是我得到了exception:“并发冲突:UpdateCommand影响了预期的1条记录中的0条”。 我找到了这个错误的解释: 因为记录在从SELECT语句返回后可能已被修改,但在发出UPDATE或DELETE语句之前,自动生成的UPDATE或DELETE语句包含WHERE子句,指定仅在包含所有原始行的情况下才更新行值并且尚未从数据源中删除。 如果自动生成的更新尝试更新已删除的行或不包含DataSet中找到的原始值,则该命令不会影响任何记录,并且会引发DBConcurrencyException。 这意味着自动生成的UPDATE命令会影响数据库中的0行。 我使用paradox(db-file)数据库,除了我之外没有人改变它。 我猜我的程序在某处改变了同一行两次。 我想通过手动执行所有生成的查询来调试我的程序,并找到哪一个不影响任何行(因为实际上我非常确定所有更改只进行一次而且bug在其他地方)))。 是否可以手动运行自动生成的命令? 我的代码太大而且很复杂,不能在这里发布,但通常它的工作方式是这样的(我做了一个工作项目并从那里开始) using System; using System.Data; using System.Windows.Forms; using System.Data.OleDb; namespace OleDBCommandBuilder { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { string cs = @”Provider=Microsoft.Jet.OLEDB.4.0;”; cs += @”Data Source=C:\FOLDER\1\SPR_KMZ\;”; cs += @”Extended Properties=Paradox 5.x;”; OleDbConnection […]

使用OLEDB将AccessFile从Stream读取到DataSet

我使用Oledb读取AccessFile(.accdb)到DataSet,我不知道表名或列,常规实现是: public void GetAccessDB(string filepath){ this.ConnectionString = “Provider=Microsoft.ACE.OLEDB.12.0;Data Source = ” + filepath; // get Table Names this.TableNames = new List(); using (System.Data.OleDb.OleDbConnection oledbConnection = new System.Data.OleDb.OleDbConnection(this.ConnectionString)) { oledbConnection.Open(); System.Data.DataTable dt = null; dt = oledbConnection.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, null); foreach (System.Data.DataRow row in dt.Rows) { string strSheetTableName = row[“TABLE_NAME”].ToString(); if (row[“TABLE_TYPE”].ToString() == “TABLE”) this.TableNames.Add(strSheetTableName); } oledbConnection.Close(); } […]

首先检查数据库单元是否为空

我通过C#访问MS Access 2007数据库,每当我尝试读取空单元格时,我都会收到exception。 具体来说,我正在尝试读取可能会或可能不会为空的“日期/时间”单元格。 我正在使用OLE DB ,并填充了一个DataSet。 这些条件都不起作用: DataSet dataSet = GetDataSet(); DataRow row = dataSet.Tables[0].Rows[0]; DateTime time = new DateTime(); time = (DateTime)row[5]; // Exception thrown 在尝试分配单元格之前如何检查单元格是否为空? 这些都不起作用: if(row[5] == null) ; if(row[5] == DBNull) ; if(row[5] == (String)””) ; 编辑:我应该提到:当我调试时,它说行[5]等于“System.DBNull”,但是当我尝试“if(row [5] == DBNULL)”时出现错误。 错误说“DBNULL是一种类型,在给定的上下文中无效”。

检查OleDbConnection状态的最佳方法

显然( MSDN )有时候OleDbConnection.ResetState()什么都不做,所以即使连接失败,OleDbConnection.State仍然会被设置为Open。 我正在寻找最好的解决方法,以便当我检查连接状态时,我可以避免引发exception(只要连接在上次检查和使用尝试之间没有失败)。 没有什么比每次只是为了查看是否抛出exception而发送“无用的”sql语句更好的了吗? 在实际使用之前,如何确保连接已打开?