MS Access OleDB 不返回任何行
Posted
技术标签:
【中文标题】MS Access OleDB 不返回任何行【英文标题】:MS Access OleDB does not return any row 【发布时间】:2015-02-23 20:25:03 【问题描述】:我正在使用此代码将数据返回到我的应用程序:
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 中,这是连接字符串键:
<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 方法,为什么我的代码不使用此代码返回任何行并返回所有行?
【问题讨论】:
【参考方案1】:在关闭连接之前,您需要从数据读取器读取对象。喜欢:
List<object> x = new List<>();
while (dr.Read())
x.Add(<your stuff>); // add as appropriate
然后返回列表(或您使用的任何内容)而不是返回数据读取器
【讨论】:
【参考方案2】:因为您的 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;
【讨论】:
以上是关于MS Access OleDB 不返回任何行的主要内容,如果未能解决你的问题,请参考以下文章
在 MS Access 中保存来自 VB.Net Windows 窗体的数据时出现错误 System.Data.OleDb.OleDbException:“标准表达式中的数据类型不匹配”。
使用 Oledb 对象插入 ms-access 查询获取无效查询异常