HTTP 500:SQL连接字符串导致错误

时间:2016-04-08 07:34:58

标签: c# asp.net sql-server

我正在使用ASP.NET开发API。有一次,我需要一种方法来调用另一种方法。这两个都使用存储过程:

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();
            }
        }                  
    }

我遇到的问题是,在调用UpdateTeam方法时,此代码会抛出500内部服务器错误。我发现问题出现在ConnectionString.Open()函数的GetTeamById行。

我认为这可能是由于连接仍在打开?但这不就是为什么人们使用using()?我该如何解决这个问题?

感谢您的支持!

1 个答案:

答案 0 :(得分:3)

当我连接到一个程序时,我总是遵循这个标准:

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