关于数据库connection与reader相互绑定的疑问
C# code
public SqliteDataReader ExecuteQuery(string sqlQuery)
{
try
{
this.connection.Open();
dbCommand = this.connection.CreateCommand();
dbCommand.CommandText = sqlQuery;
DataReader reader = dbCommand.ExecuteReader();
return reader;
}
catch (System.Exception ex)
{
Debug.Log(ex.ToString());
}
finally
{
this.connection.Close();
}
return null;
}
代码就是这样的. 但是不是ms平台的东西 , 所以部分关键字别较真.
我的意思是: 为什么DataReader reader = dbCommand.ExecuteReader(); 所获取到的 reader 必须是和 connection 绑定的呢? 因为当我 finally 把connection关闭的时候 这个方法返回的reader也不可用了.
但从数据的理论上理解, 我的reader凭什么跟你 sql的connection绑定起来? 有何绑定的必要呢?
从逻辑学角度. 无非就是利用 connection 获得了一个open的连接, 然后通过sql脚本把 数据抓到 connction 对象所控制的内存区域里, 然后 connction 再把这些数据吐出来, 吐给要返回的 reader 上. 然后规定 reader 和 connection没有绑定关系即可.
但是实际上. 不管是之前我在java中遇到的. 还是在c#中遇到的, 所有系统库都倾向于去提供一个 connection 与reader 绑定的访问方法. 这肯定有他的道理的. 但道理是什么呢? 我暂时没想明白. 因为我以为: 提供一个 connection与reader互相没有关系的方法是更有用的.
------解决方案--------------------DataReader并没有把你查的所有数据都放在本地,所以Connection不能销毁。
javax.sql.rowset.CachedRowSet 不懂,根据你的描述应该就是一次性读取数据到本地,.net里可以用DataTable,多张表的话用DataSet,这时connection是可以销毁的。
------解决方案--------------------一本书你不打开你能读么?
------解决方案--------------------