C#中关于大数据库的查询遍历问题

shaw-肖班 2013-11-22 03:55:17
一个数据表有50行X576列。里头有27种数值(字符串型)。怎样较快地遍历数据表并把27种数据存到一个数组里头!
我用了两个for加一个switch,不过效率不高!【用了20分钟也没处理完,是不是和数值类型有关?!!】谢谢!

代码如下:
public int[] FiveMinutes(string str)
{
DB db = new DB();
int[] Channel = new int[27];
for (int i = 0; i <= db.reDt(str).Rows.Count - 1; i++)
{
for (int j = 0; j < 85; j++)
{
switch (db.reDt(str).Rows[i][j].ToString())
{
case "CCTV-1": Channel[0]++; break;
case "CCTV-2": Channel[1]++; break;
case "CCTV-3": Channel[2]++; break;
case "CCTV-4": Channel[3]++; break;
case "CCTV-5": Channel[4]++; break;
case "CCTV-6": Channel[5]++; break;
case "CCTV-7": Channel[6]++; break;
case "CCTV-8": Channel[7]++; break;
case "CCTV-9": Channel[8]++; break;
case "浙江卫视": Channel[9]++; break;
case "东方卫视": Channel[10]++; break;
case "安徽卫视": Channel[11]++; break;
case "北京卫视": Channel[12]++; break;
case "辽宁卫视": Channel[13]++; break;
case "山东卫视": Channel[14]++; break;
case "天津卫视": Channel[15]++; break;
case "宁夏卫视": Channel[16]++; break;
case "河南卫视": Channel[17]++; break;
case "湖北卫视": Channel[18]++; break;
case "四川卫视": Channel[19]++; break;
case "江西卫视": Channel[20]++; break;
case "贵州卫视": Channel[21]++; break;
case "广东卫视": Channel[22]++; break;
case "吉林卫视": Channel[23]++; break;
case "河北卫视": Channel[24]++; break;
case "重庆卫视": Channel[25]++; break;
case "广西卫视": Channel[26]++; break;
default: break;
}
}
}
for (int k = 0; k < 27; k++)
{
Channel[k] = Channel[k] * 5;
}
return Channel;
}

public DataTable reDt(string cmdstr)
{
SqlConnection con = GetCon();
SqlDataAdapter da = new SqlDataAdapter(cmdstr, con);
DataSet ds=new DataSet();
da.Fill(ds);
return (ds.Tables[0]);
}
哪里出问题了,求大神帮忙
...全文
280 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
好基友一被子 2013-11-22
  • 打赏
  • 举报
回复
引用 9 楼 qiwei31229 的回复:
[quote=引用 7 楼 qy1116 的回复:] [quote=引用 6 楼 qiwei31229 的回复:] [quote=引用 5 楼 qy1116 的回复:] [quote=引用 4 楼 qiwei31229 的回复:] [quote=引用 2 楼 qy1116 的回复:] 一次性把数据取出来 在内存中处理!
怎么实现呢?谢谢[/quote] datatable dt=db.reDt(str);先直接取出数据存到datatable中 后续的循环里db.reDt(str)改成dt 试试[/quote] public DataTable reDt(string cmdstr) { SqlConnection con = GetCon(); SqlDataAdapter da = new SqlDataAdapter(cmdstr, con); DataSet ds=new DataSet(); da.Fill(ds); return (ds.Tables[0]); } 这个就是你说的功能![/quote]我知道。 DB db = new DB(); int[] Channel = new int[27]; DataTable dt=db.reDt(str); for (int i = 0; i <= dt.Rows.Count - 1; i++) { for (int j = 0; j < 85; j++) { switch (dt.Rows[i][j].ToString()) { 我是叫你改成这样试试[/quote] 哇哈,万分感谢,解决了。果然大神!!![/quote]别这么说,结贴给分就好了
shaw-肖班 2013-11-22
  • 打赏
  • 举报
回复
引用 7 楼 qy1116 的回复:
[quote=引用 6 楼 qiwei31229 的回复:] [quote=引用 5 楼 qy1116 的回复:] [quote=引用 4 楼 qiwei31229 的回复:] [quote=引用 2 楼 qy1116 的回复:] 一次性把数据取出来 在内存中处理!
怎么实现呢?谢谢[/quote] datatable dt=db.reDt(str);先直接取出数据存到datatable中 后续的循环里db.reDt(str)改成dt 试试[/quote] public DataTable reDt(string cmdstr) { SqlConnection con = GetCon(); SqlDataAdapter da = new SqlDataAdapter(cmdstr, con); DataSet ds=new DataSet(); da.Fill(ds); return (ds.Tables[0]); } 这个就是你说的功能![/quote]我知道。 DB db = new DB(); int[] Channel = new int[27]; DataTable dt=db.reDt(str); for (int i = 0; i <= dt.Rows.Count - 1; i++) { for (int j = 0; j < 85; j++) { switch (dt.Rows[i][j].ToString()) { 我是叫你改成这样试试[/quote] 哇哈,万分感谢,解决了。果然大神!!!
格桑花 2013-11-22
  • 打赏
  • 举报
回复
我提一种方案你可以尝试下, 1、真对每一列用group by进行分组,然后存入临时表中 2、对临时表中数据再使用一次group by
好基友一被子 2013-11-22
  • 打赏
  • 举报
回复
引用 6 楼 qiwei31229 的回复:
[quote=引用 5 楼 qy1116 的回复:] [quote=引用 4 楼 qiwei31229 的回复:] [quote=引用 2 楼 qy1116 的回复:] 一次性把数据取出来 在内存中处理!
怎么实现呢?谢谢[/quote] datatable dt=db.reDt(str);先直接取出数据存到datatable中 后续的循环里db.reDt(str)改成dt 试试[/quote] public DataTable reDt(string cmdstr) { SqlConnection con = GetCon(); SqlDataAdapter da = new SqlDataAdapter(cmdstr, con); DataSet ds=new DataSet(); da.Fill(ds); return (ds.Tables[0]); } 这个就是你说的功能![/quote]我知道。 DB db = new DB(); int[] Channel = new int[27]; DataTable dt=db.reDt(str); for (int i = 0; i <= dt.Rows.Count - 1; i++) { for (int j = 0; j < 85; j++) { switch (dt.Rows[i][j].ToString()) { 我是叫你改成这样试试
shaw-肖班 2013-11-22
  • 打赏
  • 举报
回复
引用 5 楼 qy1116 的回复:
[quote=引用 4 楼 qiwei31229 的回复:] [quote=引用 2 楼 qy1116 的回复:] 一次性把数据取出来 在内存中处理!
怎么实现呢?谢谢[/quote] datatable dt=db.reDt(str);先直接取出数据存到datatable中 后续的循环里db.reDt(str)改成dt 试试[/quote] public DataTable reDt(string cmdstr) { SqlConnection con = GetCon(); SqlDataAdapter da = new SqlDataAdapter(cmdstr, con); DataSet ds=new DataSet(); da.Fill(ds); return (ds.Tables[0]); } 这个就是你说的功能!
好基友一被子 2013-11-22
  • 打赏
  • 举报
回复
引用 4 楼 qiwei31229 的回复:
[quote=引用 2 楼 qy1116 的回复:] 一次性把数据取出来 在内存中处理!
怎么实现呢?谢谢[/quote] datatable dt=db.reDt(str);先直接取出数据存到datatable中 后续的循环里db.reDt(str)改成dt 试试
shaw-肖班 2013-11-22
  • 打赏
  • 举报
回复
引用 2 楼 qy1116 的回复:
一次性把数据取出来 在内存中处理!
怎么实现呢?谢谢
shaw-肖班 2013-11-22
  • 打赏
  • 举报
回复
引用 1 楼 z_dota 的回复:
Channel[0]++ Channel[k] = Channel[k] * 5;
这个什么问题?
好基友一被子 2013-11-22
  • 打赏
  • 举报
回复
一次性把数据取出来 在内存中处理!
Dotar 2013-11-22
  • 打赏
  • 举报
回复
Channel[0]++ Channel[k] = Channel[k] * 5;

62,073

社区成员

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

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

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

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