2013-04-02 45 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