日期:2014-05-18  浏览次数:20895 次

麻烦帮我看下 这样调用存储过程对不??
SqlCommand cmd = new SqlCommand("po_queryprice", conn);
  cmd.CommandType = CommandType.StoredProcedure;
  cmd.Parameters.Add("@ccinvcode", SqlDbType.VarChar);
  cmd.Parameters.Add("@ccvencode", SqlDbType.VarChar);
  cmd.Parameters["@ccinvcode"].Value = dt.Tables[0].Rows[i][0].ToString();
  cmd.Parameters["@ccvencode"].Value = dt.Tables[0].Rows[i][1].ToString();
  SqlDataAdapter sqldap = new SqlDataAdapter(cmd);
  DataSet ddt = new DataSet();
  sqldap.Fill(ddt);

------解决方案--------------------
你调用存储过程的代码应该没有什么问题,但是整个逻辑太乱了,不知道你的目的是什么。注意到
cmd.Parameters["@ccinvcode"].Value = dt.Tables[0].Rows[i][0].ToString();
这一句里面有个循环变量i,dt的含义应该是一个数据集。你要遍历数据集中某个datatable的所有行,然后作为存储过程的参数,并执行多次的fill操作,很难理解是什么目的?
因为你每循环一次,就重新new一个ddt ,循环后ddt里面肯定不是你想要的东西
------解决方案--------------------
create proc po_queryprice
@ccinvcode varchar(32),
@ccvencode varchar(32)
as
select MaxPrice=max(price),TotalAmount=sum(amount)
from orders
where ccinvcode=@ccinvcode and ccvencode=@ccvencode
go