MS Access OleDB不返回任何行

时间:2015-02-23 20:25:04

标签: c# oledbcommand

我使用此代码将数据返回到我的应用:

        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获取应用程序连接字符串的方法:

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

在app.config中,这是connectionstring键:

    <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方法则返回所有行?

2 个答案:

答案 0 :(得分:0)

在关闭连接之前,需要从datareader读取对象。喜欢:

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

然后返回List(或任何你使用的)而不是返回datareader

答案 1 :(得分: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;
    }