标签: oledbconnection

使用C#使用OleDb解析CSV

我知道这个话题已经完成了死亡,但我最终处于斗智斗勇.

我需要解析一个csv.这是一个非常普通的CSV和解析逻辑是由另一个开发人员使用OleDB编写的,他发誓它在度假前工作:)

CSV sample:
Dispatch Date,Master Tape,Master Time Code,Material ID,Channel,Title,Version,Duration,Language,Producer,Edit Date,Packaging,1 st TX,Last TX,Usage,S&P Rating,Comments,Replace,Event TX Date,Alternate Title
,a,b,c,d,e,f,g,h,,i,,j,k,,l,m,,n,
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是我遇到了各种错误,具体取决于我尝试的连接字符串.

当我尝试连接字符串时:

Provider=Microsoft.Jet.OLEDB.4.0;Data Source="D:\TEST.csv\";Extended Properties="text;HDR=No;FMT=Delimited"
Run Code Online (Sandbox Code Playgroud)

我收到错误:

'D:\TEST.csv' is not a valid path.  Make sure that the path name is spelled correctly and that you are connected to the server on which the file resides.
Run Code Online (Sandbox Code Playgroud)

当我尝试连接字符串时:

Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\TEST.csv;Extended Properties=Excel 12.0;
Run Code Online (Sandbox Code Playgroud)

或连接字符串

Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\TEST.csv;Extended Properties=Excel 8.0;
Run Code Online (Sandbox Code Playgroud)

我收到错误:

External table is not in the expected format.
Run Code Online (Sandbox Code Playgroud)

我正在考虑丢弃所有代码并从头开始.有什么明显的东西我做错了吗?

c# csv oledb parsing oledbconnection

21
推荐指数
1
解决办法
4万
查看次数

帮助excel文件的OleDB连接字符串

我遇到的问题是数据适配器只查看每列中的第一行来确定数据类型.在我的情况下,第一列"SKU"是前500行的数字然后我碰巧有SKU的混合数字和字母.所以最终发生的事情是SKU列中的行是空白的,但我仍然得到每个列行的其他信息.

我相信它是控制它的连接字符串,并且使用我当前的设置它应该工作,但事实并非如此.

连接字符串:

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""";
Run Code Online (Sandbox Code Playgroud)


ImportMixedTypes=Text;TypeGuessRows=0
Run Code Online (Sandbox Code Playgroud)

应该是重要的关键字,看看0行,只使用文本作为一切的值类型.

我提出的"bandaid"是让电子表格中的第一行混合使用字母和数字,特别是在我的查询中留下该行.

c# connection-string oledbconnection import-from-excel

20
推荐指数
1
解决办法
3万
查看次数

OLED单元格值被OLEDB提供程序截断

我正在使用OleDbConnection类从Excel 2000/2003工作簿中检索数据:

string connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" +
                          "Data Source=" + filename + ";" +
                          "Extended Properties=\"Excel 8.0;IMEX=1\";";

OleDbConnection connection = new OleDbConnection(connectionString);
connection.Open();

// code to get table name from schema omitted

var dataAdapter = new OleDbDataAdapter(string.Format("SELECT * FROM [{0}]", name),connection);
var myDataSet = new DataSet();
dataAdapter.Fill(myDataSet, "ExcelInfo");
Run Code Online (Sandbox Code Playgroud)

现在结果表明,工作表中长度大于255个字符的单元格正在被截断.这是Microsoft.Jet.OLEDB提供程序中的限制,还是我可以做些什么呢?

任何人?

.net oledb excel oledbconnection

14
推荐指数
1
解决办法
2万
查看次数

如何强制ADO.Net仅在reader TableSchema中使用System.String DataType

我正在使用OleDbConnection来查询Excel 2007电子表格.我想强制OleDbDataReader只使用字符串作为列数据类型.

系统正在查看前8行数据并将数据类型推断为Double.问题是在第9行我在该列中有一个字符串,OleDbDataReader返回一个Null值,因为它无法转换为Double.

我使用过这些连接字符串:

Provider = Microsoft.ACE.OLEDB.12.0; Data Source ="ExcelFile.xlsx"; Persist Security Info = False; Extended Properties ="Excel 12.0; IMEX = 1; HDR = No"

Provider = Microsoft.Jet.OLEDB.4.0; Data Source ="ExcelFile.xlsx"; Persist Security Info = False; Extended Properties ="Excel 8.0; HDR = No; IMEX = 1"

看看reader.GetSchemaTable().Rows [7] .ItemArray [5],它的dataType是Double.

此架构中的第7行与我遇到问题的Excel中的特定列相关联.ItemArray [5]是它的DataType列

是否可以为读者创建自定义TableSchema,以便在访问ExcelFiles时,我可以将所有单元格视为文本而不是让系统尝试推断数据类型?


我在此页面上找到了一些很好的信息:使用ADO.NET阅读Excel电子表格的提示

关于ADO.NET接口的主要特点是如何处理数据类型.(您会注意到我在阅读电子表格时一直在仔细避免返回哪些数据类型的问题.)您准备好了吗?ADO.NET扫描前8行数据,并基于此猜测每列的数据类型.然后它会尝试将该列中的所有数据强制转换为该数据类型,并在强制失败时返回NULL!

谢谢,
基思


这是我的代码的简化版本:

using (OleDbConnection connection = new OleDbConnection(BuildConnectionString(dataMapper).ToString()))
{
    connection.Open();
    using (OleDbCommand cmd = new OleDbCommand())
    {
        cmd.Connection = connection;
        cmd.CommandText = SELECT …
Run Code Online (Sandbox Code Playgroud)

c# excel types oledbconnection

12
推荐指数
1
解决办法
1万
查看次数

OLEDB连接到Access数据库(accdb)

我想为一个练习做一个简单的应用程序,所以连接到像Access这样的简单数据库(.accdb)会很不错

我的程序看起来像这样:

using System;
using System.Collections.Generic; 
using System.Data;
using System.Data.OleDb;
using System.Linq;
using System.Web;

namespace myProject.Account
{
    public class DbManager
    {
       private OleDbConnection _dbConnection;

       public void OpenDbConnection()
       {
        _dbConnection = new OleDbConnection {ConnectionString = GetConnectionString()};
       }

       private string GetConnectionString()
       {
        return "Provider=Microsoft.ACE.OLEDB.14.0;Data Source=exercise1.accdb";
       }

       public void CloseDbConnection()
       {
        _dbConnection.Close();
       }

       public void GetUser()
       {
        DataSet myDataSet = new DataSet();
        var myAdapptor = new OleDbDataAdapter();
        OleDbCommand command = new OleDbCommand("SELECT * FROM tblUser", _dbConnection);
        myAdapptor.SelectCommand = command;
        myAdapptor.Fill(myDataSet, "tblUser");
       } 

    } …
Run Code Online (Sandbox Code Playgroud)

c# asp.net oledbconnection

12
推荐指数
1
解决办法
7万
查看次数

SQLGetInfo - 如何使用此函数

我开发了ac#应用程序,它连接到许多类型的数据库服务器,如Sql,Oracle,Mysql等.连接是使用ODBC建立的.

我需要找到建立连接的服务器类型(DBMS类型),因为用户只输入DSN名称.

经过几个小时的冲浪,我发现我的要求只能通过这个函数SQLGetInfo.但我不知道如何在C#中处理这个问题.

甚至已经检查过这个Link1.

从上面的链接,我发现ODBC API只提供DataBase名称DataSource Name.但是我需要找到Datatbase类型,比如它是SQL连接还是Oracle连接或mySqlConnection.

是否可以从DSN名称获取DBMS类型..?

注意:我不想从注册表设置中读取它.我试过这个并且它可以工作,但我有权限问题..!

c# database odbc oledbconnection dsn

12
推荐指数
1
解决办法
1782
查看次数

在C#应用程序中,是应该创建一次DB连接,还是每次执行SQL语句?

在C#应用程序中,是应该OleDBConnection创建一次,还是每次执行SQL语句?

我正在查看其他人编写的C#代码.每个SQL语句都在创建一个OleDbConnection对象,其连接字符串指向MDB数据库.

是否适合每次创建OleDbConnection对象,或者应该在应用程序的开头创建对象并从那时开始使用.

c# oledbconnection winforms

11
推荐指数
3
解决办法
2611
查看次数

什么导致我的OLEDbException,IErrorInfo.GetDescription失败了E_FAIL(0x80004005)

我对Access数据库使用OleDbConnection,OldDbCommand和OleDbReader.

我在数据库中有一个命名查询,我从代码中调用.

从访问运行时,查询正常工作.

有几个资源表明错误可能是由于在查询中使用保留字并用括号括起来引起的.我没有使用任何保留字,并且无论如何都将括号中的所有列名包装起来以排除它.

试图确定问题所在,我已将查询简化为简单

SELECT id FROM table1 WHERE id = 5 
Run Code Online (Sandbox Code Playgroud)

Ole连接不会抛出异常.

当我介绍查询的下一部分时:

SELECT table1.id FROM table1 INNER JOIN storedQuery ON table1.id = storedQuery.id WHERE table1.id = 5" 
Run Code Online (Sandbox Code Playgroud)

然后我得到了例外.

例外情况如下:

  • 消息:IErrorInfo.GetDescription失败,带有E_FAIL(0x80004005).
  • ErrorCode:-2147467259
  • NativeError:-533136361
  • SQLState:3000

ms-access exception oledbconnection

11
推荐指数
3
解决办法
4万
查看次数

检查OleDbConnection状态的最佳方法

显然(MSDN)有时候OleDbConnection.ResetState()什么都不做,所以即使连接失败,OleDbConnection.State仍然会被设置为Open.我正在寻找最好的解决方法,以便当我检查连接状态时,我可以避免引发异常(只要连接在上次检查和使用尝试之间没有失败).

没有什么比每次发送"无用的"sql语句只是为了查看是否抛出异常更好的了吗?在实际使用之前,如何确保连接已打开?

c# oledb connection database-connection oledbconnection

9
推荐指数
1
解决办法
4969
查看次数

SSIS包在SQL Server 2012中未运行为32位

我有一个我在VS2012中开发的包(使用SQL数据工具组件),它使用VFPOLEDB提供程序从DBF文件收集数据,并将其放入SQL Server 2012 X64服务器上的数据库中.包含该程序包的项目将Run64BitRuntime的DebugOption设置为false.我已将此包导入测试和实时服务器的SSIS包存储(相同的设置).VFPOLEDB提供程序安装在两者上,我可以在两台计算机的注册表中看到它的32位运行时.

程序包在测试计算机上正常运行,但在现场计算机上运行失败.SQL的实时实例似乎无法识别已安装的32位VFPOLEDB提供程序.

SQL实例的唯一区别是实时环境设置了集成服务目录,而测试则没有.查看服务器的日志,当实时启动时,它运行sp_ssis_startup,然后记录有关正在加载的不安全程序集的消息.此SP不在测试环境中运行,因为没有目录.

我创建的作业将标志设置为使用32位运行时,但我不禁觉得SSIS目录与我正在使用的VFPOLEDB有问题,而不是加载它.

我对SSIS目录一无所知,那么有人能够建议我可以进入的任何方向吗?

更新:这是我的工作步骤配置.设置32位运行时标志. SSIS作业步骤配置

更新#2:

  1. OLEDB提供程序已正确安装.
  2. 两台计算机上都安装了相同版本的提供程序.
  3. OBDCAD32.exe显示相同版本的VFPOLEDB提供程序.两台计算机上都没有定义DSN.我的本地机器确实定义了DSN,因此我将尝试为dBASE文件添加一个,看看是否有帮助.
  4. 现在正在尝试这一步骤.我正在寻找一种方法来使用dtexec工具,而无需创建SSISDB目录.虽然我确实删除了现有的SSIS目录,并停止在服务启动时执行sp_ssis_startup.我没有看到关于不安全程序集的日志条目,但作业仍然失败,并且出现了与以往相同的错误.我将在4日报告,并可能进一步要求进一步的指导.

更新#3:
我刚刚检查过,测试和现场环境与我原先说的不一样.实时服务器没有32位版本的dtexec.exe(虽然我认为这不重要,因为TechNet说使用SQL Server代理运行的作业将始终使用64位版本.我想我使用了x86和i64 ISO来设置测试环境,但只有64位版本才能实现.改变这一点需要,我想,从实时框中卸载Integration Services共享组件并使用双iso重新安装它.

我想设置"使用32位运行时"选项只有在使用32位版本时才有效吗?这可能解释了一些事情

ssis oledbconnection visual-foxpro sql-server-2012 ssis-2012

9
推荐指数
1
解决办法
1万
查看次数