0

我正面临危急情况的问题

当阅读器以随机方式关闭时,对于在同一纳秒处理多个请求的门户,尝试调用无效

从最近几天开始,在测试或调试项目时没有出现这种情况。

前任:

web.config中的连接是这样的

<add name="testconnection" connectionString="Data Source=1.1.1.1;Initial Catalog=testdb;MultipleActiveResultSets=True;Persist Security Info=True;User ID=testUser;Password=testpassword;Max Pool Size=20000;Min Pool Size=5;Pooling=true;" providerName="System.Data.SqlClient" />

C#中的代码是这样的:

SqlConnection conn= new SqlConnection(ConfigurationManager.ConnectionStrings["testconnection"].ToString());

    public string Adscategory(string Name)   
    {    
     string temp = string.Empty; 

     if (conn.State != ConnectionState.Open)     
     {      
      conn.Open();      
     }       
 SqlCommand comm = new SqlCommand("select Id from TestTable where tid='" + Name + "'", conn);    

   try       
   {      
    temp = Convert.ToString(comm.ExecuteScalar());      
   }   

  catch{}
  finally   
  {          
  conn.Close();       
  }       
return temp;   

}

现在我有两个问题

1- 读取器关闭时调用读取的尝试无效,这发生在 comm.ExecuteScalar() 这条线上,当同时发出多个请求时。

2-连接未关闭。连接的当前状态是正在连接。这发生在 conn.Open() 也以随机方式生成。

任何帮助都应该是可观的。

4

1 回答 1

2

SqlParameter使用和正确的异常处理应该有助于避免错误。using也强烈建议使用一次性物品以防止泄漏。

public string Adscategory(string Name)
{
string temp = String.Empty;
using (SqlConnection conn= new SqlConnection(ConfigurationManager.ConnectionStrings["testconnection"].ToString()))
{
    conn.Open();
    // INJECTION ALERT: Use the appropriate SqlParameters
    using (SqlCommand comm = new SqlCommand(String.Format("SELECT Id FROM TestTable WHERE tid=@nameParam", Name), conn))
    {
        comm.Parameters.AddWithValue("@nameParam", Name);

        try
        {
            temp = comm.ExecuteScalar().ToString();
        }
        catch(SqlException ex) { /*DB error, react appropriately !*/ }
        // catch(Exception ex) { /*Gotta catch'em all ... don't do this. */ }
    }
    return temp;
}
于 2012-12-18T13:04:28.367 回答