在获取数据库记录的时候,如果只需要获取一行记录,大家一般用什么方法?好像datareader很容易导致连接池的问题。。
改成获取dataset好多了
改成获取dataset好多了
解决方案 »
- 请教如何控制gridview换行
- C#和Jquery实现FusionChart的使用
- 注册用户ID机制,大家帮忙探讨下
- 高手帮忙解决分页问题
- 仅当使用了列的列表,并且 IDENTITY_INSERT 为 ON 时,才能在表 'Minzu' 中为标识列指定显式值。
- 在VS2005中,关于DataList的绑定数据的代码,帮我看一下,错在哪里?
- 急!!大虾们帮帮忙 repeater控件里定时更换数据 怎么实现?
- UserControl中的路径问题
- 如果我的程序里面用了ACCESS,需要在数据管理器里面手工注册吗,直接用行吗,谢谢了,
- 今天辭工,大家給點意見,散分
- 替换掉范围内指定字符串(急)
- GRIDVIEW里嵌套一个DetailsView,但是插入记录无法获取DetailsView里控件的值
也不一定吧,因为datareader好像是“线程池独占”(这方面我不了解)的,所以如果大量用datareader的话容易导致线程池不够用
datareader并不是记录行的概念。这就好像说你想买一桶汽油人家是不是要把一个油田送给你?而datatable才是跟数据库连接真正断开的。所以在“一般”的情况下,应该考虑datatable。只有调用者能够负责任地尽快清理datareader,你才可以返回datareader。(因此最好的做法就是从来也不向外返回datareader)。
{
using (var conn = GetDBConnection())
{
var comm = conn.CreateCommand();
comm.CommandText = sql;
var reader = comm.ExecuteReader();
while (reader.Read())
yield return callback(reader);
}
}
它直接返回T的对象实例的列表。
假设应用程序实体类型是: public class DataType
{
public string X;
public int Y;
}那么应用程序可以这样调用SQLHelper的相应方法:var sql = "select field1,field2 from myTable where field3>10000";
var result = GetRecords<DataType>(sql, reader =>
new DataType
{
X = (string)reader["field1"],
Y = (int)reader["field2"]
});
foreach (var r in result)
{
打印(r);
}或者直接返回一个List<T>:var result = GetRecords<DataType>("select field1,field2 from myTable where field3>10000", reader =>
new DataType
{
X = (string)reader["field1"],
Y = (int)reader["field2"]
}).ToList();
并且,纵然是要转换,微软的ado.net也提供从设计文档接口自动匹配数据集,输出类型化数据对象的能力,
微软的样本程序是通过xml格式自动匹配的
使用DataReader、转<List>、关闭DataReader、返回<List>
那是因为 你datareader没断开!