【发布时间】:2014-06-15 05:03:07
【问题描述】:
让我先告诉你我现在在做什么以及我面临什么问题。
现在我正在使用 SqlDataReader 从数据库中获取数据,我的函数看起来像
public List<TOPIC_REPORT> gettopicreports()
{
query = "SELECT * FROM [Topic Reports]";
List<TOPIC_REPORT> rpl = new List<TOPIC_REPORT>();
try
{
con.Open();
com = new SqlCommand(query, con);
sdr = com.ExecuteReader();
while (sdr.Read())
{
rt = new TOPIC_REPORT();
rt.ContentId = sdr.GetString(0);
rt.TimesReported = sdr.GetInt64(1);
rt.IsBanned = sdr.GetInt32(2);
rpl.Add(rt);
}
con.Close();
return rpl;
}
catch (Exception e)
{
con.Close();
throw e;
}
}
上面代码的问题
- 需要将值分配给类变量,并且多选查询存在问题。
- 需要处理 ResultSet 、while 循环等
以上问题解决方案使用SqlDataAdapter。
public DataSet getdata()
{
com.CommandText = "GetMasterPageData";
com.Connection = con;
com.CommandType = CommandType.StoredProcedure;
con.Open();
SqlDataAdapter adapter = new SqlDataAdapter(com);
DataSet ds = new DataSet();
adapter.Fill(ds);
con.Close();
return ds;
}
这解决了上述问题,但是
- 降低我的 prog 可读性,因为我的前端人员不知道我在 DataSet 中发送 DataTables 的顺序。
- 不知道 DataTable 中选定值的顺序。
- 前端人员需要处理最后的列索引会有问题。
建议我应该怎么做才能解决上述问题。
【问题讨论】:
-
你是说在第一个代码块中你想返回多个结果集?您的查询看起来好像只会返回一个。如果要返回多个结果集,它们是否都具有相同的列?
-
我需要返回多个不同列的结果集。
-
@HotCoolStud 请分享您的存储过程
标签: c# sql datatable sqldatareader sqldataadapter