2016-04-08 40 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

好的,谢谢!应用它,它的工作原理就像:) –