返回(IList)对象的查询结果!!!

sh1618 2009-03-16 04:43:10


public DataSet SelectExecute()
{

// 初始化
DataSet ds = new DataSet ();
try
{
// SqlCmd对象为null的场合
if (SqlCmd == null)
{
throw new Exception();
}

SqlDataAdapter sqlDa = new SqlDataAdapter(SqlCmd);
for (int i = 0; i < SqlCmd.Parameters.Count; i++)
{
string param = "null";
if (SqlCmd.Parameters[i].Value != null)
{
param = SqlCmd.Parameters[i].Value.ToString();
}
//Logger.InfoFormat("-- ***** Parameters[{0}]:{1}*****", i, param);
}

// 填充DataTable
sqlDa.Fill(ds);
}
catch (Exception e)
{
throw e;
}

// 返回查询结果
return ds;
}



上面是返回ds
求一个用SqlDataReader 读取
返回 (IList)对象 怎么写
...全文
303 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
云想慕尘 2009-03-16
  • 打赏
  • 举报
回复
MARKED BY CNDO
Teng_s2000 2009-03-16
  • 打赏
  • 举报
回复
7楼应该是lz想要的
wenblue7 2009-03-16
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 jijunwu 的回复:]


C# code
public class msgtbModel
{

private string title;

public string Title
{
get { return title; }
set { title = value; }
}
private string content;

public string Content
{
get { return content; }
set { content = value; }
}
private DateTime posttime…
[/Quote]
这个很好啊
wuyq11 2009-03-16
  • 打赏
  • 举报
回复
public IList<string> GetList(DataTable dt)
{
List<string> l = new List<string>();
if (dt != null)
{
if (dt.Rows.Count > 0)
{
for (int i = 0; i < dt.Rows[0].ItemArray.Length; i++)
l.Add(dt.Rows[0].ItemArray.GetValue(i).ToString());
}
return l;
}
else
{
return null;
}
}
通过泛型实现
http://blog.csdn.net/skyaspnet/archive/2009/01/16/3794070.aspx
gui0605 2009-03-16
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 axiaodan 的回复:]
EntityBuilder?能解释一下吗?
[/Quote]

那是我的另外一个类,里面方法代码如下:

public static EntityBuilder<Entity> CreateBuilder(IDataRecord reader)
{
EntityBuilder<Entity> result = new EntityBuilder<Entity>();
DynamicMethod method = new DynamicMethod("CreateBuilder", typeof(Entity), new Type[] { typeof(IDataReader) }, typeof(Entity), true);
ILGenerator generator = method.GetILGenerator();
generator.DeclareLocal(typeof(Entity));
generator.Emit(OpCodes.Newobj, typeof(Entity).GetConstructor(Type.EmptyTypes));
generator.Emit(OpCodes.Stloc_0);
MethodInfo getValue = reader.GetType().GetMethod("get_Item", new Type[] { typeof(int) });
for (int i = 0; i < reader.FieldCount; i++)
{

PropertyInfo propertyInfo = typeof(Entity).GetProperty(reader.GetName(i));
if (propertyInfo != null && propertyInfo.GetSetMethod() != null)
{
Label label = generator.DefineLabel();
generator.Emit(OpCodes.Ldarg_0);
generator.Emit(OpCodes.Ldc_I4, i);
generator.Emit(OpCodes.Callvirt, reader.GetType().GetMethod("IsDBNull"));
generator.Emit(OpCodes.Brtrue, label);
generator.Emit(OpCodes.Ldloc_0);
generator.Emit(OpCodes.Ldarg_0);
generator.Emit(OpCodes.Ldc_I4, i);
generator.Emit(OpCodes.Callvirt, getValue);
generator.Emit(OpCodes.Unbox_Any, reader.GetFieldType(i));
generator.Emit(OpCodes.Callvirt, propertyInfo.GetSetMethod());
generator.MarkLabel(label);
}
}
generator.Emit(OpCodes.Ldloc_0);
generator.Emit(OpCodes.Ret);
result.handler = (Load)method.CreateDelegate(typeof(Load));
return result;
}
sh1618 2009-03-16
  • 打赏
  • 举报
回复
EntityBuilder?能解释一下吗?
gui0605 2009-03-16
  • 打赏
  • 举报
回复

protected virtual IList<Entity> GetEntityList(IDataReader dr)
{
IList<Entity> _list = new List<Entity>();
EntityBuilder<Entity> _eb = EntityBuilder<Entity>.CreateBuilder(dr);
while (dr.Read())
{
_list.Add(_eb.Build(dr));
}
dr.Close();
dr.Dispose();
return _list;
}
gui0605 2009-03-16
  • 打赏
  • 举报
回复
自己写一个转换函数

public virtual IList<Entity> GetAll()
{
string sqlStr = String.Format("Select * from {0}", new Entity().TableName);
Database db = DatabaseFactory.CreateDatabase(new Entity().DataBaseName);
DbCommand cmd = db.GetSqlStringCommand(sqlStr);
IDataReader dr = db.ExecuteReader(cmd);
return GetEntityList(dr);
}
Kainen 2009-03-16
  • 打赏
  • 举报
回复

CSDN自动回帖机--AutoBack
p m51.com/bbs/dispbbs.asp?boardid=8&Id=67
sjt000 2009-03-16
  • 打赏
  • 举报
回复
要返回对象集合就是你再转换一下~
sjt000 2009-03-16
  • 打赏
  • 举报
回复

List<Model> ModelList=new List<Model>();
using (IDataReader reader = sqldb.ExecuteReader(Sqldbcomm))
{
while (reader.Read())
{
ModelList.Add(FormatDrToModel(reader));
}
}

private static Model FormatDrToLead(Idatareader dr)
{
Model model=new model();
model.Name=Convert.ToString(dr["Name"])
return model;
}



public class Model
{
private string _name;

public string Name
{
get{}
set{}
}

}

sh1618 2009-03-16
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 blackhero 的回复:]
datatable for一下,组合list.一样的
[/Quote]

直接返回list 可以不 组合是不是性能下降了

怎么用泛型 指定一个Model 用的时候在考虑是那个具体的Model?
blackhero 2009-03-16
  • 打赏
  • 举报
回复
datatable for一下,组合list.一样的
strife013 2009-03-16
  • 打赏
  • 举报
回复
写个自定义函数应该行试试:

DataTable dt = new DataTable();
((IListSource)dt).GetList();
  • 打赏
  • 举报
回复


public class msgtbModel
{

private string title;

public string Title
{
get { return title; }
set { title = value; }
}
private string content;

public string Content
{
get { return content; }
set { content = value; }
}
private DateTime posttime;

public DateTime Posttime
{
get { return posttime; }
set { posttime = value; }
}
}


//显示留言
public msgtbModel[] Readmsg()
{
SqlConnection conn = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["conn"].ToString());
string sqlStr = "select title,content,posttime from msgtb";
SqlDataAdapter sda = new SqlDataAdapter(sqlStr,conn);
DataSet ds = new DataSet();
sda.Fill(ds,"msg");
// ArrayList al = new ArrayList();
msgtbModel[] msgs=new msgtbModel[ds.Tables["msg"].Rows.Count] ;
for (int i=0; i < ds.Tables["msg"].Rows.Count; i++)
{
msgtbModel MM = new msgtbModel();
MM.Title=ds.Tables["msg"].Rows[i]["title"].ToString();
MM.Content = ds.Tables["msg"].Rows[i]["content"].ToString();
MM.Posttime = Convert.ToDateTime(ds.Tables["msg"].Rows[i]["posttime"]);
// al.Add(MM);
msgs[i] = MM;
}
// return (msgtbModel[])(al.ToArray(typeof(msgtbModel)));
return msgs;
}



SqlDaataReader 只支持向前的只读的 ,多条记录的话建议DataSet+SqlDataAdapter
vrhero 2009-03-16
  • 打赏
  • 举报
回复
面向对象...把DataSet里的数据表改写成实体类...

另外你可以用VS的强类型DataSet向导很容易地做到,适用于小项目快速开发...
sh1618 2009-03-16
  • 打赏
  • 举报
回复
sql执行处理的结果是List类型的
多谢啦

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧