标签: oledb

检查OleDbConnection状态的最佳方法

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

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

c# oledb connection database-connection oledbconnection

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

将Access DB表加载到Datatable

我有一个.ACCDB格式的数据库和一些表.

我使用以下代码成功将其加载到OleDbDataReader中:

string connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;data source=C:\\marcelo.accdb";

OleDbConnection conn = new OleDbConnection(connectionString);

string sql = "SELECT * FROM Clientes";

OleDbCommand cmd = new OleDbCommand(sql, conn);

conn.Open();

OleDbDataReader reader;

reader = cmd.ExecuteReader();
Run Code Online (Sandbox Code Playgroud)

我想将表"clientes"加载到数据表中.我该怎么办?

.net c# oledb ms-access

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

SQL Server到MySQL的数据传输

我正在尝试将基于SQL Server数据库的常量和连续的批量数据传输到MYSQL数据库.我想使用SQL Server的SSMS复制,但这显然只适用于SQL Server到Oracle或IBM DB2连接.目前,我们正在使用SSIS转换数据并将其推送到MYSQL数据库的临时位置,在该位置复制数据.我想以最快的方式传输数据和复杂的几种方法.

我有一种新方法,我计划转换数据,我相信这将解决大多数时间问题,但我想确保我们将来不会遇到时间问题.我已经设置了一个链接服务器,它使用MYSQL ODBC驱动程序在SQL Server和MYSQL之间进行通信.这看起来非常慢.我有一些代码也使用Microsoft的ODBC驱动程序,但使用得太少,我无法衡量性能.有谁知道在这两个数据库之间快速通信的方式?我一直在研究MYSQL的数据提供程序,它们似乎与OleDB层进行通信.我不太确定该相信什么,以及哪种方式可以引导任何想法?

mysql sql-server oledb connection odbc

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

如何使用OLEDB获取Excel中的唯一Excel工作表名称列表; 过滤掉显示在元数据中的非工作表

我在使用OLEDB从Excel电子表格中获取工作表名称时遇到问题.问题是,当我使用GetOleDbSchemaTable时,生成的DataTable不仅仅包含实际的工作表名称; 它有"表"的额外行,我只能假设它们由Excel内部使用.

例如,如果我有一个名为myWorksheet的工作表,下面的代码最终可能会包含一个包含myWorksheet $,myWorksheet $ PrintTable和myWorksheet $ _的列表.只有第一个myWorksheet $记录用于实际工作表.其他人只是我不需要的垃圾.当您在元数据中查看它们时,它们看起来就像常规表,即使使用TABLE类型也是如此.

现在我只是手动过滤出名称中带有"$ _"或"$ Print"的内容,但谁知道其他Excel功能可能会使这些额外的记录以不同的格式出现.

有没有人知道获取实际工作表名称的最佳方法,而不是这些不是工作表的内部表?元数据中是否存在可以区分它们的东西?

 private ArrayList getXlsWorksheetNames(OleDb.OleDbConnection conn)
    {
        ArrayList wsList = new ArrayList();
        DataTable schemaTable;

        try
        {
            conn.Open();
            schemaTable = conn.GetOleDbSchemaTable(OleDb.OleDbSchemaGuid.Tables, null);

            foreach (DataRow row in schemaTable.Rows)
            {
                //form.appendToResultsTxt("Adding worksheet to list: " + Environment.NewLine +
                //    "Name = " + row.Field<string>("TABLE_NAME") + "," + Environment.NewLine +
                //    "Type = " + row.Field<string>("TABLE_TYPE") + "," + Environment.NewLine + Environment.NewLine);
                wsList.Add(row.Field<string>("TABLE_NAME"));
            }
            conn.Close();
        }
        catch (Exception ex)
        {
            if (this.mode == …
Run Code Online (Sandbox Code Playgroud)

c# oledb excel

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

Dapper和MS Access - 读取工作,写入不起作用

让我们首先解决这个问题:我使用MS Access DB时遇到困难,我无法改变它.

这很好用:

using (OleDbConnection conn = ConnectionHelper.GetConnection())
{
  conn.Open();
  var results = conn.Query<string>(
    "select FirstName from Students where LastName = @lastName", 
    new { lastName= "Smith" }
  );
  conn.Close();
}
Run Code Online (Sandbox Code Playgroud)

这很好用:

using (OleDbConnection conn = ConnectionHelper.GetConnection())
{
  OleDbCommand cmd = new OleDbCommand(
    "update Students set FirstName = @firstName, City = @city where LastName = @lastName", 
    conn
  );
  cmd.Parameters.AddWithValue("firstName", "John");
  cmd.Parameters.AddWithValue("city", "SomeCity");
  cmd.Parameters.AddWithValue("lastName", "Smith");

  conn.Open();
  var result = cmd.ExecuteNonQuery();
  conn.Close();
}
Run Code Online (Sandbox Code Playgroud)

这不会......它执行时没有错误,但它将FirstName设置为DB中的"SomeCity",将City设置为"John":

using (OleDbConnection conn = ConnectionHelper.GetConnection())
{
  conn.Open();
  var …
Run Code Online (Sandbox Code Playgroud)

c# oledb ado.net ms-access dapper

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

OLEDB不返回第一行excel文件

我正在使用Microsoft.ACE.OLEDB.12.0连接到Microsoft Excel文件并从中获取数据.我使用Visual Studio 2012以C#语言编写代码.这是我的代码:

public DataTable getData(string fileName, string sheetName)
{
    connectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source='" 
                      + fileName
                      + "';Extended Properties= 'Excel 8.0;HDR=Yes;IMEX=1'";

    errorCode = ErrorDefinition.ERROR_NOERROR;
    errorMessage = "";
    DataTable dt = new DataTable();            
    try
    {
            string query = "SELECT * FROM [" + sheetName + "]";
            OleDbConnection con = new OleDbConnection(connectionString);
            OleDbDataAdapter dataAdapter = new OleDbDataAdapter(query, con);
            dataAdapter.Fill(dt);
    }
    catch (Exception exp)
    {
            errorCode = ErrorDefinition.ERROR_OLEDBERROR;
            errorMessage = exp.Message;
    }
    return dt;
}
Run Code Online (Sandbox Code Playgroud)

问题是dt不包含文件中指定工作表的第一行.它出什么问题了?任何帮助都是先进的.

c# oledb

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

如何使用OleDbDataAdapter从Excel文件中的任何电子表格中进行选择

我正在使用从excel文件中OleDbDataAdapter提取DataSet,但我的SELECT语句里面有问题

DataSet excelDataSet = new DataSet();
using (OleDbConnection con = new System.Data.OleDb.OleDbConnection(connectionString))
{
     con.Open();
     OleDbDataAdapter cmd = new System.Data.OleDb.OleDbDataAdapter("select * from [Name of spreadsheet]", con);
     cmd.Fill(excelDataSet);
     con.Close();
}
Run Code Online (Sandbox Code Playgroud)

如果您看到我有"select * from [Name of spreadsheet]",但我需要获取任何电子表格,例如第一个电子表格,但此电子表格的名称可以是任何内容.

怎么指定呢?是否有任何特殊字符"select * from [%]"

c# linq oledb excel oledbdataadapter

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

连接到SQL Server时OLEDB/ODBC驱动程序之间有什么区别?

我有一个SQL Server数据库,我需要通过vbscript将数据推送到它,以及将数据拉入Excel.我找到了多个连接字符串,但是没有存储库可以比较它们的性能和功能.Provider=到目前为止我找到的驱动程序选项()是:

  • {SQL Server}(ODBC)
  • SQLOLEDB(比ODBC更新,但已被弃用?)
  • SQLOLEDB.1(Excel 2016在点击"获取外部数据"时使用的内容,但在connectionstrings.com上甚至没有提到......我假设上面的新版本,但仍然是不推荐使用的技术?)
  • SQLNCLI11(本机客户端,OLE DB)
  • {SQL Server Native Client 11.0}(本机客户端,ODBC)

我读到的不同的东西说ODBC更好,因为它已经存在更长时间.并且OLE DB已经存在足够长的时间以具有相同的优势.并且OLE DB可以与某个公司的应用程序一起使用.ODBC是由同一家公司制作的.OLE DB可以更好地连接到不同类型的应用程序.ODBC对数据库的效果更好.原生是......原生,所以必须更好......因为这个名字?

我发现这里有多个问题,没有或部分答案,或者有多个评论声称答案已经过时了.那么,截至目前,这些不同驱动因素之间的具体差异是什么?他们在不同情况下有不同的表现吗?他们有不同的功能吗?我是否需要进行性能分析以确定我的特定用例的最佳性能和可靠性,或者是否有Microsoft或某些公认的专家推荐的标准"最佳实践"?或者它们基本上都在做同样的事情,只要它安装在目标系统上并不重要吗?

sql-server oledb odbc

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

通过OleDb ACE访问Excel 2007二进制文件(.xlsb)

我发现Excel 2007二进制格式(扩展名为.xlsb)完全适合我的需要,因为它加载速度快,非常紧凑.我在Excel中提供了大量带有大量数据的报告,这些报告实际上正在加载IS包.

所以我假设转换为这种格式,阅读Access Ole DB Provider 12上的文档,其中写道xlsb受此提供程序支持.我在Excel中转​​换了文件,然后在尝试在包中更改它们时(只需通过添加"b"后缀来更改文件的路径),我收到以下错误消息:

"Test connection failed because of an error in initializing provider. This 
file was created in a previous beta version of Excel 2007.  Open the file 
with Excel 2007 to save it to the most recent version of the Excel 2007 file 
format before opening the file in Access 2007."
Run Code Online (Sandbox Code Playgroud)

好吧,我认为这可能是文件转换的一些问题,所以我选了一个全新的文件,并填写了一些信息.再试一次,同样的错误!!

然后我用".udl"文件尝试了这个方法,同样的错误!然后我尝试在不同的机器上进行测试: - 我自己的(Windows Vista SP1) - 我的同事(Windows XP SP2) - IS服务器(Windows Server 2003 x64 SP2)

错误仍然存​​在.我发现重现错误很容易,我有点惊讶,我没有通过谷歌搜索找到任何关于它的东西!

有人能帮助我吗?

谢谢,拉斐尔

oledb ssis excel-2007

8
推荐指数
1
解决办法
4804
查看次数

我什么时候应该使用Odbc,OleDb,SQLClient?有什么权衡取舍

我开始使用SQLServer数据库.所以我似乎应该使用System.Data.SqlClient命名空间.但是,我们有可能关闭我们的SqlServer数据库并转到MySql或Oracle.出于这个原因,我提出了一套关于我们的.Net应用程序如何与数据库通信的标准,以便在将来我们需要时更容易迁移到不同的数据库系统.

所以这是标准:

  1. 如果可能的话使用ORM(例如NHibernate)(没有LINQ,因为它只支持SqlServer,但是实体框架及其对Oracle和MySql的支持呢?)
  2. 如果ORM是过度杀死,则使用参数化SQL查询.
  3. 仅将存储过程用于需要在数据库上执行的长时间运行或复杂操作.

这让我想到了我的主要问题. 我应该使用哪个命名空间来编写DAL代码?

在我看来,选择是在System.Data.ODBC和之间System.Data.OleDB:

  • 有什么权衡取舍?
  • 一个比另一个更受欢迎吗?
  • 您对前3个标准有何看法?

.net database oledb odbc sqlclient

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