很抱歉,如果主题无法准确反映我的确切问题,我正在努力解释我的问题,尽管这似乎很简单。
我已经建立了一个简单的" DB助手"类,该类为我执行SQL语句,给定一些参数等。这是代码块:
public DataSet selectSprocData(string sprocName, SqlParameter[] parameterArray, out int returnValue)
{
//processes the specified Select stored procedure based on parameter array provided;
//this is the only place anywhere in the application we will do a simple SELECT using a sproc.
DataSet dataset = new DataSet();
using (SqlConnection cn = new SqlConnection(ConfigurationManager.ConnectionStrings["MyServer"].ToString()))
{
cn.Open();
SqlDataAdapter adapter = new SqlDataAdapter(sprocName, cn);
adapter.SelectCommand.CommandType = CommandType.StoredProcedure;
adapter.SelectCommand.Parameters.AddRange(parameterArray);
SqlParameter retValParam = adapter.SelectCommand.Parameters.Add("@RETURN_VALUE", SqlDbType.Int);
retValParam.Direction = ParameterDirection.ReturnValue;
adapter.SelectCommand.CommandTimeout = 600;
adapter.Fill(dataset);
returnValue = (int)retValParam.Value;
adapter.Dispose();
cn.Close();
}
return dataset;
}
当我进行长期运行的sproc并在SSM中执行它时,它将运行并最终超时。同时,我可以在SSM中打开另一个查询窗口,并对我的DB执行任何其他选择或查询。
现在,当我使用上面的代码块通过我的Web应用程序调用此Sproc时,该页面将旋转,加载和加载,直到最终(几分钟后),该过程将超时。
但是,在此基于Web的呼叫中,我无法打开任何其他窗口,并执行使用相同DB代码调用其他Sprocs的任何其他UI函数。
本质上,一个用户从UI执行Sproc/函数的用户似乎很长时间都在阻止其他所有人在我的应用程序上执行任何操作。
我了解,首先,我需要有更好的查询,这些查询不超时,但是我缺少或不做任何事情。被阻止直到另一个已完成或计时?
我的web.config ConnectionsTring没有特殊参数,简单:
Persist Security Info=False;User ID=sa;Password=xxxx;Initial Catalog=db_live;Data Source=my.host.com"
任何帮助将不胜感激
您无法真正将Windows应用程序(SQL Management Studio)与ASP.NET Web应用程序(在IIS中运行)
进行比较所有ASP.NET代码都在单个线程上运行,因此该线程必须等待数据库代码完成,该代码将阻止所有其他所有内容,直到完成为止。
使用ASP.NET更新面板执行长期运行的存储过程和UI绑定。
asp.net更新面板