C#执行存储过程非常慢

Delphiandliu 2009-09-24 11:51:37
各位大侠,我写了个存储过程,在查询分析器中执行只需1秒钟,但用C#调用的时候居然要1分多钟还会出结果,不知什么原因。有人说是用了这个 SqlParameter 的原因。在线等解决方案, 谢谢
...全文
506 33 打赏 收藏 转发到动态 举报
写回复
用AI写文章
33 条回复
切换为时间正序
请发表友善的回复…
发表回复
yangyn77 2009-09-24
  • 打赏
  • 举报
回复
太有才了!
Delphiandliu 2009-09-24
  • 打赏
  • 举报
回复
各位,上面是我的调用代码
Delphiandliu 2009-09-24
  • 打赏
  • 举报
回复
Response.Write("begin:" + DateTime.Now.ToString() +"<Br>");
DataSet ds=new DataSet();
SqlConnection conn=new SqlConnection(Post183Configuration.ConnectionString);
SqlCommand cmd=new SqlCommand();
cmd.CommandTimeout = 1200;
cmd.Connection=conn;
cmd.CommandText="getOrganOrderReport";

SqlParameter busiIdparam=new SqlParameter("@strBisID",System.Data.SqlDbType.VarChar,2000);
busiIdparam.Value=GetSelectBusiness();
cmd.Parameters.Add(busiIdparam);

SqlParameter lvlparam=new SqlParameter("@strLvl",System.Data.SqlDbType.VarChar,10);
lvlparam.Value="3";
cmd.Parameters.Add(lvlparam);

SqlParameter sdateparam=new SqlParameter("@Bdate",System.Data.SqlDbType.VarChar,20);
sdateparam.Value=this.txtBgnTime.Text.Trim();
cmd.Parameters.Add(sdateparam);

SqlParameter edateparam=new SqlParameter("@Edate",System.Data.SqlDbType.VarChar,20);
edateparam.Value=this.txtEndTime.Text.Trim();
cmd.Parameters.Add(edateparam);

SqlParameter stdparam=new SqlParameter("@strStatus",System.Data.SqlDbType.VarChar,1000);
stdparam.Value=this.GetStatus();
cmd.Parameters.Add(stdparam);

cmd.CommandType=CommandType.StoredProcedure;

Response.Write("begin1:" + DateTime.Now.ToString() +"<Br>");
SqlDataAdapter da=new SqlDataAdapter();
da.SelectCommand=cmd;

ds.Tables.Add("CityOrderTotal");
da.Fill(ds.Tables["CityOrderTotal"]);
Response.Write("begin2:" + DateTime.Now.ToString() +"<Br>");
conn.Dispose();
cmd.Dispose();
Response.Write("end:" + DateTime.Now.ToString() +"<Br>");
return ds;
Rommen 2009-09-24
  • 打赏
  • 举报
回复
up
cadtian 2009-09-24
  • 打赏
  • 举报
回复
无代码无真相
mythad 2009-09-24
  • 打赏
  • 举报
回复
up
yixianggao 2009-09-24
  • 打赏
  • 举报
回复
肯定是代码问题,估计存在死锁滴情况!
soaringbird 2009-09-24
  • 打赏
  • 举报
回复
结果集有多少行?
上海程序员3 2009-09-24
  • 打赏
  • 举报
回复
肯定是c#部分代码有问题,我好像从未碰到过有区别的情况
zhengliyan_star 2009-09-24
  • 打赏
  • 举报
回复
不是吧!我也用这个阿,速度慢,运行的结果对吗??
风之影子 2009-09-24
  • 打赏
  • 举报
回复
C#中调用的代码呢?贴出来看看
Delphiandliu 2009-09-24
  • 打赏
  • 举报
回复
[Quote=引用 32 楼 jiezi316 的回复:]
啊?看来你在线啊!对不起了哈。我乱说的。呵呵

这个肯定不是C#执行存储过程慢。你在查询分析器里查询对于longText 这类字段字数太多就会显示 <Long Text>,而不会显示完整内容。如果在程序里你的40条记录都含有这样的大数据的字段的话,可能查询很快,但发送数据结果集要很长时间。
[/Quote]

嗯,没关系,不过你说的可能有些道理。
jiezi316 2009-09-24
  • 打赏
  • 举报
回复
啊?看来你在线啊!对不起了哈。我乱说的。呵呵

这个肯定不是C#执行存储过程慢。你在查询分析器里查询对于longText 这类字段字数太多就会显示<Long Text>,而不会显示完整内容。如果在程序里你的40条记录都含有这样的大数据的字段的话,可能查询很快,但发送数据结果集要很长时间。
Delphiandliu 2009-09-24
  • 打赏
  • 举报
回复
[Quote=引用 30 楼 jiezi316 的回复:]
错觉
[/Quote]


呵呵,此话怎么讲?
jiezi316 2009-09-24
  • 打赏
  • 举报
回复
错觉
Delphiandliu 2009-09-24
  • 打赏
  • 举报
回复
[Quote=引用 27 楼 hack95 的回复:]
没找到问题...
这就得自己调试了,说不定不是这里慢。

引用 9 楼 delphiandliu 的回复:
Response.Write("begin:" + DateTime.Now.ToString() +" <Br>");
DataSet ds=new DataSet();
SqlConnection conn=new SqlConnection(Post183Configuration.ConnectionString);
SqlCommand cmd=new SqlCommand();
cmd.CommandTimeout = 1200;
cmd.Connection=conn;
cmd.CommandText="getOrganOrderReport";

SqlParameter busiIdparam=new SqlParameter("@strBisID",System.Data.SqlDbType.VarChar,2000);
busiIdparam.Value=GetSelectBusiness();
cmd.Parameters.Add(busiIdparam);

SqlParameter lvlparam=new SqlParameter("@strLvl",System.Data.SqlDbType.VarChar,10);
lvlparam.Value="3";
cmd.Parameters.Add(lvlparam);

SqlParameter sdateparam=new SqlParameter("@Bdate",System.Data.SqlDbType.VarChar,20);
sdateparam.Value=this.txtBgnTime.Text.Trim();
cmd.Parameters.Add(sdateparam);

SqlParameter edateparam=new SqlParameter("@Edate",System.Data.SqlDbType.VarChar,20);
edateparam.Value=this.txtEndTime.Text.Trim();
cmd.Parameters.Add(edateparam);

SqlParameter stdparam=new SqlParameter("@strStatus",System.Data.SqlDbType.VarChar,1000);
stdparam.Value=this.GetStatus();
cmd.Parameters.Add(stdparam);

cmd.CommandType=CommandType.StoredProcedure;

Response.Write("begin1:" + DateTime.Now.ToString() +" <Br>");
SqlDataAdapter da=new SqlDataAdapter();
da.SelectCommand=cmd;

ds.Tables.Add("CityOrderTotal");
da.Fill(ds.Tables["CityOrderTotal"]);
Response.Write("begin2:" + DateTime.Now.ToString() +" <Br>");
conn.Dispose();
cmd.Dispose();
Response.Write("end:" + DateTime.Now.ToString() +" <Br>");
return ds;

[/Quote]


呵呵,我都输出了时间,确定是在这里慢了
Delphiandliu 2009-09-24
  • 打赏
  • 举报
回复
to zxkid
用的是sqlserver 2000,C# 1.0


to jaylongli
SqlDataAdapter da=new SqlDataAdapter();
da.SelectCommand=cmd;

ds.Tables.Add("CityOrderTotal");
da.Fill(ds.Tables["CityOrderTotal"]);

大部分时间花在了上面四个语句上。
柳晛 2009-09-24
  • 打赏
  • 举报
回复
没找到问题...
这就得自己调试了,说不定不是这里慢。

[Quote=引用 9 楼 delphiandliu 的回复:]
Response.Write("begin:" + DateTime.Now.ToString() +" <Br>");
DataSet ds=new DataSet();
SqlConnection conn=new SqlConnection(Post183Configuration.ConnectionString);
SqlCommand cmd=new SqlCommand();
cmd.CommandTimeout = 1200;
cmd.Connection=conn;
cmd.CommandText="getOrganOrderReport";

SqlParameter busiIdparam=new SqlParameter("@strBisID",System.Data.SqlDbType.VarChar,2000);
busiIdparam.Value=GetSelectBusiness();
cmd.Parameters.Add(busiIdparam);

SqlParameter lvlparam=new SqlParameter("@strLvl",System.Data.SqlDbType.VarChar,10);
lvlparam.Value="3";
cmd.Parameters.Add(lvlparam);

SqlParameter sdateparam=new SqlParameter("@Bdate",System.Data.SqlDbType.VarChar,20);
sdateparam.Value=this.txtBgnTime.Text.Trim();
cmd.Parameters.Add(sdateparam);

SqlParameter edateparam=new SqlParameter("@Edate",System.Data.SqlDbType.VarChar,20);
edateparam.Value=this.txtEndTime.Text.Trim();
cmd.Parameters.Add(edateparam);

SqlParameter stdparam=new SqlParameter("@strStatus",System.Data.SqlDbType.VarChar,1000);
stdparam.Value=this.GetStatus();
cmd.Parameters.Add(stdparam);

cmd.CommandType=CommandType.StoredProcedure;

Response.Write("begin1:" + DateTime.Now.ToString() +" <Br>");
SqlDataAdapter da=new SqlDataAdapter();
da.SelectCommand=cmd;

ds.Tables.Add("CityOrderTotal");
da.Fill(ds.Tables["CityOrderTotal"]);
Response.Write("begin2:" + DateTime.Now.ToString() +" <Br>");
conn.Dispose();
cmd.Dispose();
Response.Write("end:" + DateTime.Now.ToString() +" <Br>");
return ds;
[/Quote]
加油馒头 2009-09-24
  • 打赏
  • 举报
回复
打个短点调试下 到哪里开始慢的
zxkid 2009-09-24
  • 打赏
  • 举报
回复
楼主用是的SQL Server 2005吧?
加载更多回复(13)

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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