2016-04-08 69 views
0

我正在使用ASP.NET的API。有一次,我需要一個方法來調用另一個。這兩方面的使用存儲過程:HTTP 500:導致錯誤的SQL連接字符串

public async Task<IHttpActionResult> GetTeamById(string TeamId) 
{  
     DataTable Result = new DataTable(); 

     SqlCommand Command = new SqlCommand("GetTeam", ConnectionString); 
     Command.CommandType = CommandType.StoredProcedure; 
     Command.Parameters.AddWithValue("@TeamId", TeamId); 

     using (ConnectionString) /defined above 
     { 
      try 
      {  
       ConnectionString.Open(); 

       using (SqlDataReader DataReader = Command.ExecuteReader()) 
       { 
        Result.Load(DataReader); 
        return Ok(Result); 
       } 
      } 
      catch 
      { 
       return InternalServerError(); 
      } 
     } 
    } 

    public async Task<IHttpActionResult> UpdateTeam(string TeamId) 
    { 
     SqlCommand Command = new SqlCommand("UpdateTeam", ConnectionString); 
     Command.CommandType = CommandType.StoredProcedure;    
     Command.Parameters.AddWithValue("@Id", TeamId); 

     using (ConnectionString) 
     { 
      try 
      { 
       ConnectionString.Open(); 

       int returnvalue = (int) Command.ExecuteScalar();    

       if (returnvalue == 1) 
        return BadRequest(); 
       else 
        await GetTeamById(TeamId); 
      } 
      catch 
      { 
       return InternalServerError(); 
      } 
     }     
    } 

我所面臨的問題是,這種代碼拋出500內部服務器錯誤當UpdateTeam方法被調用。我發現問題發生在GetTeamById函數的ConnectionString.Open()行處。

我認爲這可能是由於連接仍然打開?但是,這不就是爲什麼人們使用using()?我該如何解決這個問題?

感謝您的支持!

+0

你爲什麼不使用你的connestionstring喜歡這些 – Bharat

+0

使用(VAR dbAbel_Reporting =新Abel_ReportingPortalEntities()) { – Bharat

+0

即使用它爲VAR和創建它的新實例.. – Bharat

回答

2

當我連接到一個程序我公司始終遵循這個標準:

using (var conn = new SqlConnection(connectionString)) 
using (var command = new SqlCommand("ProcedureName", conn) { 
          CommandType = CommandType.StoredProcedure }) { 
    conn.Open(); 
    command.ExecuteNonQuery(); 
    conn.Close(); 
} 
+0

好的,謝謝!應用它,它的工作原理就像:) –