2015-02-23 59 views
0

我使用这个代码将数据返回给我的应用程序:的MS Access OLEDB不返回任何行

 try 
     { 
      OleDbConnection conn = new OleDbConnection(GetConnectionStringAccess()); 
      string cSQL = "SELECT Cracha, Data_Hora, Terminal, Entrada_Saida, Situacao, Tipo, Divergencia, SaiuMarcacao, Justificativa, IDMarcacao, PIS, NSR FROM Marcacao"; 
      conn.Open(); 
      OleDbCommand cmd = new OleDbCommand(); 
      cmd.Connection = conn; 
      cmd.CommandText = cSQL; 
      cmd.CommandType = CommandType.Text; 
      OleDbDataReader dr = cmd.ExecuteReader(); 
      conn.Close(); 
      return dr; 
     } 
     catch (Exception ex) 
     { 
      throw; 
     } 

但什么都不会返回。我的数据库有一百万条记录。

如果我访问使用数据集/表适配器分贝,该数据被正常显示,但在没有任何代码返回;

这是)我的方法GetConnectionStringAccess(返回的连接字符串:

 "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\CCBM\\Ponto Dimep\\BM\\DIMEP.Mdb;Persist Security Info=True;Jet OLEDB:Database Password=xxxx" 

这里是我的方法来获取应用程序的app.config中的ConnectionString:

public static string GetConnectionStringAccess() 
    { 
     return System.Configuration.ConfigurationManager.ConnectionStrings["ImportaAccess.Properties.Settings.PontoAccessBM"].ConnectionString; 
    } 

在app.config中,这是连接字符串密钥:

<add name="ImportaAccess.Properties.Settings.PontoAccessBM" connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\CCBM\Ponto Dimep\BM\DIMEP.Mdb;Persist Security Info=True;Jet OLEDB:Database Password=obdI109j" 
     providerName="System.Data.OleDb" /> 

为什么我的代码不返回任何行使用此代码并返回所有行,如果我运行tableAdapter.Fill方法?

回答

0

在关闭连接之前,您需要将数据读取器读取到对象中。像:

List<object> x = new List<>(); 
while (dr.Read()) 
{ 
    x.Add(<your stuff>); // add as appropriate 
} 

然后返回清单(或任何你使用),而不是返回DataReader的

0

因为你的DataReader是一个指针,你返回之前关闭。

尝试的DataReader之前检索数据使用关闭数据表 像这样:

try 
    { 
     DataTable Tbl = new DataTable(); 
     OleDbConnection conn = new OleDbConnection(GetConnectionStringAccess()); 
     string cSQL = "SELECT Cracha, Data_Hora, Terminal, Entrada_Saida, Situacao, Tipo, Divergencia, SaiuMarcacao, Justificativa, IDMarcacao, PIS, NSR FROM Marcacao"; 
     conn.Open(); 
     OleDbCommand cmd = new OleDbCommand(); 
     cmd.Connection = conn; 
     cmd.CommandText = cSQL; 
     cmd.CommandType = CommandType.Text; 
     OleDbDataReader dr = cmd.ExecuteReader(); 
     Tbl.Load(rd,LoadOption.OverwriteChanges); 
     conn.Close(); 
     return Tbl; 
    } 
    catch (Exception ex) 
    { 
     throw; 
    }