标签: oledbdataadapter

DataAdapter.Fill方法(数据集)

我尝试通过OleDB从Access数据库中获取一些数据DataSet.但是DataSetFill()方法之后是空的.当我在D*中手动触发它们时,相同的语句可以工作并返回1行.

OleDbConnection connection = 
   new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Inventar.accdb");
DataSet1 DS = new DataSet1();
connection.Open();

OleDbDataAdapter DBAdapter = new OleDbDataAdapter(
    @"SELECT tbl_Computer.*,  tbl_Besitzer.*
      FROM tbl_Computer 
      INNER JOIN tbl_Besitzer ON tbl_Computer.FK_Benutzer = tbl_Besitzer.ID 
      WHERE (((tbl_Besitzer.Vorname)='ma'));", 
    connection);

DBAdapter.Fill(DS);
Run Code Online (Sandbox Code Playgroud)

提前致谢.

新工作代码:

DataSet ds = new DataSet();
OleDbDataAdapter DBAdapter = new OleDbDataAdapter();

OleDbConnection connection = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Inventar.accdb");
string query = @"
    SELECT tbl_Computer.*,  tbl_Besitzer.*
    FROM tbl_Computer 
    INNER JOIN tbl_Besitzer ON tbl_Computer.FK_Benutzer = tbl_Besitzer.ID 
    WHERE (((tbl_Besitzer.Vorname)='ma'));";

connection.Open();

using (OleDbCommand command …
Run Code Online (Sandbox Code Playgroud)

c# oledb ado.net dataset oledbdataadapter

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

如何使用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万
查看次数

使用Data Adapter Update在.NET中使用ACE超时的Excel

我遇到了将数据从数据集写入Excel电子表格的超时问题.这是我目前的连接字符串:

<add key="ExcelConnectionStringHeader" value="Provider=Microsoft.ACE.OLEDB.12.0;Connect Timeout=30;Extended Properties=&quot;Excel 12.0;HDR=YES&quot;;Data Source="/>
Run Code Online (Sandbox Code Playgroud)

提供程序似乎不支持"连接超时"属性.连接超时,超时,ConnectionTimeout,ConnectTimeout等都没有.我的代码创建了数据适配器和插入命令,以及数据集的更新.除非Update命令本身花费超过15秒,这是默认的OleDb超时,否则这很有效.这就是为什么我试图在连接字符串中设置它.我已将CommandTimeout从默认值30增加,但这确实无关紧要.以下是我的代码:

        OleDbDataAdapter da = new OleDbDataAdapter(szHeaderSelect, oCnn); // Ratings_Test -- Loan_Test$A1:F1]",
        DataSet dsTest = new DataSet();

        da.InsertCommand = new OleDbCommand(szNewSQL + "(" + szColumns + ") " + "VALUES ( " + szParams + ")", oCnn);
        da.InsertCommand.CommandTimeout = 300;


        foreach (DataRow oDr in dtTable.Rows)
        {

            drNew = dsTest.Tables[0].NewRow();

            dsTest.Tables[0].Rows.Add(drNew);
        }

        var timer = new System.Diagnostics.Stopwatch();
        timer.Start();
        var recs = da.Update(dsTest, szExcelTab); // Ratings_Test           }
        timer.Stop();
Run Code Online (Sandbox Code Playgroud)

我省略了循环,实际上构建了insert命令的内容和参数.相信我,一切正常.2200+记录工作正常.

在我添加计时器之后,我发现问题是超时.处理2221记录时,需要14.95秒,并在电子表格中显示正常.处理2260条记录时,需要15.21秒才会显示任何内容.没有任何错误.我检查了所有行更新后的行状态,它们都没有显示失败.

最重要的是,由于ConnectionTimeout属性是ReadOnly,并且提供程序似乎不支持连接字符串中的Timeout,该怎么做....

谢谢.

c# excel oledbdataadapter ms-jet-ace

6
推荐指数
1
解决办法
2149
查看次数

如何修复"不合法的OleAut日期".在C#中读取Excel文件时?

我一直在使用excel电子表格,到目前为止我从来没有遇到任何问题..但是这个错误,"不是合法的OleAut日期.",当我试图读取excel文件时,突然出现了.有谁知道如何解决这个问题.这是我用来读取excel并将数据放入数据集的代码.它之前运行良好但在我对数据源进行了一些更改(不涉及日期)之后出现了这个错误.

var fileName = string.Format("C:\\Drafts\\Excel 97-2003 formats\\All Data 09 26 2012_Edited.xls");
        var connectionString = string.Format("Provider=Microsoft.Jet.OLEDB.4.0; data source={0}; Extended Properties=Excel 8.0;", fileName);

        var adapter = new OleDbDataAdapter("SELECT * FROM [Sheet1$]", connectionString);

        DataSet Originalds = new DataSet();
        adapter.Fill(Originalds, "Employees"); // this is where the error shows up
Run Code Online (Sandbox Code Playgroud)

c# excel oledbdataadapter

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

如何通过OleDb在MS Access上使用公用表表达式执行复杂的SQL查询

我在使用VB.NET执行复杂的SQL查询时遇到问题OledbDataAdapter.这个Sql查询在W3school的SQL Tryit编辑器中工作正常.以下是我现有的VB.NET代码,有没有办法直接在VB.NET中执行那种SQL查询,或者任何人都可以更改此查询以使用VB.NET同样的结果?

    Dim con As New OleDb.OleDbConnection
    Dim dbProvider As String
    Dim dbSource As String
    Dim ds As New DataSet
    Dim da As OleDb.OleDbDataAdapter
    Dim sql As String

    dbProvider = "PROVIDER=Microsoft.Jet.OLEDB.4.0;"
    dbSource = "Data Source = C:\database.mdb"
    con.ConnectionString = dbProvider & dbSource
    con.Open()
    sql = "With query1 as (SELECT Val,DateAndTime FROM [FloatTable] where TagIndex='0') " _
        ",Query2 as (SELECT Val,DateAndTime FROM [FloatTable] where TagIndex='1') " _
        "select query1.val as 'TT348',Query2.val as 'TT358',Query2.DateAndTime as 'DateAndTime' " _
        "From query1,Query2 …
Run Code Online (Sandbox Code Playgroud)

sql database vb.net ms-access oledbdataadapter

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

Excel文件中的古怪SELECT通过OleDbDataAdapter方法(C#)

我有一个这种形式的Excel文件:

Column 1    Column 2    Column 3  
 data1        data2    
 data1        data2  
 data1        data2  
 data1        data2  
 data1        data2       data3  
Run Code Online (Sandbox Code Playgroud)

也就是说,除了最后一行之外,整个第3列都是空的.我通过OleDbDataAdapter访问Excel文件,返回一个DataTable:这是代码.

query = "SELECT * FROM [" + query + "]";
objDT = new DataTable();
objCmdSQL = this.GetCommand();
objCmdSQL.CommandText = query;
objSQLDad = new OleDbDataAdapter(objCmdSQL);
objSQLDad.Fill(objDT);
return objDT;
Run Code Online (Sandbox Code Playgroud)

关键是,在这种情况下,我的代码返回一个只有第1列和第2列的DataTable.
我的猜测是JET引擎试图通过每列中第一个单元格的类型来推断列类型; 作为第一个值null,整个列被忽略.
我试图填写零,这段代码实际上是返回所有三列; 这显然是最不可取的解决方案,因为我必须处理大量的小文件.
反转选择范围(从"A1:C5"到"C5:A1")也不起作用.我正在寻找更优雅的东西.
我已经发现了一些讨论类型不匹配的帖子(int列中的varchar单元格,反之亦然),但实际上还没有发现与此相关的任何内容.
谢谢阅读!

编辑

奇怪的行为再次.我必须处理大多数Excel 2003 .xls文件,但由于这个问题已得到解答,我认为我可以针对Excel 2007 .xslx文件测试我的代码.连接字符串如下:

string strConn = @"Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" + _fileName.Trim() + @";Extended Properties=""Excel 12.0;HDR=No;IMEX=1;""";
Run Code Online (Sandbox Code Playgroud)

我得到"外部表不是预期的格式"异常,当ACE/JET和正在打开的文件之间存在版本不匹配时,我认为这是标准异常.

字符串

Provider=Microsoft.ACE.OLEDB.12.0 
Run Code Online (Sandbox Code Playgroud)

意味着我正在使用最新版本的OLEDB,我快速浏览了一下,这个版本用于需要连接到.xlsx文件的任何地方.
我尝试过只有一个香草提供商(只有Excel 12.0,没有IMEX和HDR),但我得到了同样的例外.
我在.NET 2.0.50727 …

c# excel null oledbcommand oledbdataadapter

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

使用参数执行查询时,SqlCommand会变慢

执行参数时,DbDataAdapter.Fill()极其缓慢!

我有一个内部有2个参数的查询,当我在查询中硬编码这些参数时,需要1秒才能执行(在470k表行中,只返回20行).

我在这里发现了许多类似的帖子,我尝试了所有这些解决方案(设置arithabort,选项重新编译,选项优化,......)没有运气.

我只是执行查询(sql server 2008)而不是存储过程,因此使用arithabort的查询是这样的:

    string strSql = @"set ARITHABORT ON;
                             select  TOP 20 ....
Run Code Online (Sandbox Code Playgroud)

此外,我尝试在同一个事务中调用set arithabort,但首先执行该查询.

我不知道我做错了什么,但感觉是当我在ado.net上定义了参数时,ado.net正在执行一个非常糟糕的执行计划.

由于这个糟糕的选择,SSMS中的执行时间是1秒(缓存后),但在asp中是9秒!

查询是这样的:

strSQL @ ="select*
from Table1 where Name like @name";

然后:

        DbProviderFactory factory = DbProviderFactories.GetFactory(mProvider);
        DbCommand dbcmd = factory.CreateCommand();
        if (CommandTimeout != null)
            dbcmd.CommandTimeout = CommandTimeout.Value;
        if(this.transaccion != null)
            dbcmd.Transaction = this.transaccion;
        dbcmd.Connection = dbc;
        dbcmd.CommandText = strSQL;
        if (parametros != null)
            dbcmd.Parameters.AddRange(parametros);
        DbDataAdapter dbda = factory.CreateDataAdapter();
        dbda.SelectCommand = dbcmd;
        DataTable dt = new DataTable();
        dbda.Fill(dt);
        return dt;
Run Code Online (Sandbox Code Playgroud)

编辑14/01/2013(18:44)

我不再从DbProviderFactory检索连接,我直接使用SqlConnection和SqlCommand.我知道DbCommand和DbProvider是一个基础...但我觉得还有更多东西......因为性能急剧增加300%! …

sql-server asp.net performance ado.net oledbdataadapter

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