2013-04-02 28 views
0
 SqlConnection sqlConn = new SqlConnection(MyClass.GlobalConn()); 
     sqlConn.Open(); 

     try 
     { 
      string getAllBranch = "SELECT iBranch_num,LTRIM(RTRIM(sConstant)) FROM tblgobranch"; 
      SqlCommand cmdgetAllBranch = new SqlCommand(getAllBranch, sqlConn); 
      SqlDataReader dRgetAllBranch=cmdgetAllBranch.ExecuteReader(); 



      while (dRgetAllBranch.Read()) 
      { 

       SqlCommand cmd = new SqlCommand("dbo.rvk_GetSalesPerItem", sqlConn); 
       cmd.CommandType = CommandType.StoredProcedure; 

       cmd.Parameters.Add("@piDateFrom", SqlDbType.Int).Value = FromDT1; 
       cmd.Parameters.Add("@piDateThru", SqlDbType.Int).Value = ToDT2; 
       cmd.Parameters.Add("@BRANCH", SqlDbType.NVarChar).Value = dRgetAllBranch[1].ToString(); 
       cmd.Parameters.Add("@brNum", SqlDbType.Int).Value = dRgetAllBranch[0].ToString(); 
       cmd.Parameters.Add("@PluCode", SqlDbType.NVarChar).Value = str1; 
       cmd.ExecuteNonQuery(); 

      } 

我有错误这里错误使用执行存储过程虽然条件

“没有与此命令相关的已开放数据读取器”

请帮我这个。

+0

尝试在每次调用rvkGetSalesPerItem SP时使用新的Connection对象。 – jerjer

+0

'MyClass.GlobalConn'方法有什么作用? –

+0

我的连接字符串连接到我的数据库。 –

回答

2

当您尝试在同一连接上执行存储过程时,您当前正在打开的连接上执行读取器(SqlDataReader dRgetAllBranch=cmdgetAllBranch.ExecuteReader();)。这是错误的原因。

尝试这不是您while循环

SqlConnection sqlConnStoredProc = new SqlConnection(MyClass.GlobalConn()); 
sqlConnStoredProc.Open(); 

SqlCommand cmd = new SqlCommand("dbo.rvk_GetSalesPerItem", sqlConnStoredProc); 
cmd.CommandType = CommandType.StoredProcedure; 

cmd.Parameters.Add("@piDateFrom", SqlDbType.Int).Value = FromDT1; 
cmd.Parameters.Add("@piDateThru", SqlDbType.Int).Value = ToDT2; 
cmd.Parameters.Add("@BRANCH", SqlDbType.NVarChar).Value = dRgetAllBranch[1].ToString(); 
cmd.Parameters.Add("@brNum", SqlDbType.Int).Value = dRgetAllBranch[0].ToString(); 
cmd.Parameters.Add("@PluCode", SqlDbType.NVarChar).Value = str1; 
cmd.ExecuteNonQuery(); 

sqlConnStoredProc.Close(); 
+0

谢谢@ jordanhill123,它的工作。 –

1

你必须使用一个新的连接对象,以执行其他命令同时使用阅读器。

SqlConnection sqlConn = new SqlConnection(MyClass.GlobalConn()); 
    sqlConn.Open(); 

    try 
    { 
     string getAllBranch = "SELECT iBranch_num,LTRIM(RTRIM(sConstant)) FROM tblgobranch"; 
     SqlCommand cmdgetAllBranch = new SqlCommand(getAllBranch, sqlConn); 
     SqlDataReader dRgetAllBranch=cmdgetAllBranch.ExecuteReader(); 




     while (dRgetAllBranch.Read()) 
     { 
      using(var con = new SqlConnection(MyClass.GlobalConn())) 
      { 

      con.Open(); 

      SqlCommand cmd = new SqlCommand("dbo.rvk_GetSalesPerItem", con); 
      cmd.CommandType = CommandType.StoredProcedure; 

      cmd.Parameters.Add("@piDateFrom", SqlDbType.Int).Value = FromDT1; 
      cmd.Parameters.Add("@piDateThru", SqlDbType.Int).Value = ToDT2; 
      cmd.Parameters.Add("@BRANCH", SqlDbType.NVarChar).Value = dRgetAllBranch[1].ToString(); 
      cmd.Parameters.Add("@brNum", SqlDbType.Int).Value = dRgetAllBranch[0].ToString(); 
      cmd.Parameters.Add("@PluCode", SqlDbType.NVarChar).Value = str1; 
      cmd.ExecuteNonQuery(); 

      } 

     } 
0

我认为你需要在循环

while (dRgetAllBranch.Read()) 
     { 

      SqlCommand cmd = new SqlCommand("dbo.rvk_GetSalesPerItem", sqlConn); 
      cmd.Connection.Open(); //Open 
      cmd.CommandType = CommandType.StoredProcedure; 

      cmd.Parameters.Add("@piDateFrom", SqlDbType.Int).Value = FromDT1; 
      cmd.Parameters.Add("@piDateThru", SqlDbType.Int).Value = ToDT2; 
      cmd.Parameters.Add("@BRANCH", SqlDbType.NVarChar).Value = dRgetAllBranch[1].ToString(); 
      cmd.Parameters.Add("@brNum", SqlDbType.Int).Value = dRgetAllBranch[0].ToString(); 
      cmd.Parameters.Add("@PluCode", SqlDbType.NVarChar).Value = str1; 
      cmd.ExecuteNonQuery(); 
      cmd.Connection.Close(); //Close 
     } 
0

打开的连接只能使用唯一的SqlCommand。 while循环之前打开,并在循环之后关闭。

SqlConnection sqlConn = new SqlConnection(MyClass.GlobalConn()); 
    sqlConn.Open(); 

    try 
    { 
     string getAllBranch = "SELECT iBranch_num,LTRIM(RTRIM(sConstant)) FROM tblgobranch"; 
     SqlCommand cmdgetAllBranch = new SqlCommand(getAllBranch, sqlConn); 
     SqlDataReader dRgetAllBranch=cmdgetAllBranch.ExecuteReader(); 


     SqlCommand cmd = new SqlCommand("dbo.rvk_GetSalesPerItem", sqlConn); 
     cmd.CommandType = CommandType.StoredProcedure; 
     cmd.Connection.Open();//open one time 
     while (dRgetAllBranch.Read()) 
     {     
      cmd.parameters.Cler();//clear old parameter and add new 
      cmd.Parameters.Add("@piDateFrom", SqlDbType.Int).Value = FromDT1; 
      cmd.Parameters.Add("@piDateThru", SqlDbType.Int).Value = ToDT2; 
      cmd.Parameters.Add("@BRANCH", SqlDbType.NVarChar).Value = dRgetAllBranch[1].ToString(); 
      cmd.Parameters.Add("@brNum", SqlDbType.Int).Value = dRgetAllBranch[0].ToString(); 
      cmd.Parameters.Add("@PluCode", SqlDbType.NVarChar).Value = str1; 
      cmd.ExecuteNonQuery(); 

     } 
     cmd.Connection.Close();//open one time