[Ado.Net]将数据(MSSQL)查询结果填充到ILIST<T>
2013-07-03 15:07
537 查看
private static IList<T> QueryDbToList<T>(string _sql) where T : class,new() { IList<T> _lsModels = new List<T>(); using (SqlConnection _sqlcon = new SqlConnection(sConStr)) { try { _sqlcon.Open(); using (SqlCommand _sqlcmd = new SqlCommand(_sql, _sqlcon)) { using (IDataReader _ireader = _sqlcmd.ExecuteReader()) { //Hashtable _hsDbColumns = ProcessDbColumnToHashTable(_ireader); while (_ireader.Read()) { Object _objT = Activator.CreateInstance<T>(); for (int j = 0; j < _ireader.FieldCount; j++) { string _sPName = _ireader.GetName(j); int _nPIndex = _ireader.GetOrdinal(_sPName); if (_nPIndex == -1) continue; object _objPValue = _ireader.GetValue(_nPIndex); if (_objPValue == DBNull.Value) continue; PropertyInfo _propertyInfo = _objT.GetType().GetProperty(_sPName); if (_propertyInfo != null) _propertyInfo.SetValue(_objT, _objPValue, null); } _lsModels.Add((T)_objT); /* 第二种方法 Object _objT = Activator.CreateInstance<T>(); PropertyInfo[] _objPropertyInfos = _objT.GetType().GetProperties(); foreach (PropertyInfo _p in _objPropertyInfos) { string _sPName = _p.Name; if (!_hsDbColumns.ContainsKey(_sPName.ToUpper())) continue; int _nPIndex = _ireader.GetOrdinal(_sPName); if (_nPIndex == -1) continue; object _objPValue = _ireader.GetValue(_nPIndex); if (_objPValue != DBNull.Value) _p.SetValue(_objT, _objPValue, null); } _lsModels.Add((T)_objT); */ } } } } catch { return null; } finally { if (_sqlcon.State != ConnectionState.Closed) _sqlcon.Close(); } } return _lsModels; } private static Hashtable ProcessDbColumnToHashTable(IDataReader _ireader) { if (_ireader != null) { int _nDbColumnCount = _ireader.FieldCount; Hashtable _hsDbColumns = new Hashtable(); for (int i = 0; i < _nDbColumnCount; i++) { string _sFiledName = _ireader.GetName(i).ToUpper(); if (!_hsDbColumns.ContainsKey(_sFiledName)) _hsDbColumns.Add(_sFiledName, _sFiledName); } return _hsDbColumns; } return null; }
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
相关文章推荐
- java—将查询的结果封装成List<Map>与用回调函数实现数据的动态封装(44)
- 为什么数据可以从pl/sql查出来而使用ado.net查询,结果却是空?
- ADO.NET使用事务出错的解决(MSDTC) <转>
- 4-2 ADO.NET-查询和检索数据13
- 将任意查询结果ResultSet转化成List<Map>
- <项目一>mysql中为查询出的数据添加自增序列号
- ADO.NET数据查询方法
- C++文本查询程序 定义类管理数据 用智能指针 用StrBlob代替vector<string> C++Primer 练习12.32
- java查询mysql的char字段List<Object[]>数据被截断
- .Net Task<T>的一种比较神奇的卡死情况(Wait/Result卡死, await能得到结果)
- ADO.NET Entity Framework--不再查询直接更新数据
- [MSSQL]添加数据到数据库,ADO.NET入门之前!
- ADO.NET 2.0 大批量数据操作和多个动态的结果集
- ADO.NET中DataSet数据填充操作
- C# - list<>数据填充到Dataset里
- mybatis查询如何返回List<Map>类型数据
- 黑马程序员-ado.net 存储查询到的离线数据
- C++文本查询程序 定义类管理数据 用智能指针 用StrBlob代替vector<string> C++Primer 练习12.32
- 查询ADO.net entity 一个表的前五个数据
- 数据库查询结果封装List<Map<String,String>>