【发布时间】:2019-07-29 15:14:09
【问题描述】:
在大量使用下,网络应用偶尔会失败。发生这种情况时,我得到的唯一错误消息是
存储过程失败
问题在于,它在 80% 到 90% 的时间都可以正常工作,并且只有在网站在几分钟内获得多次点击时才会失败,比如在两分钟的时间间隔内来自六个不同位置的 150 次点击。
我们在 Windows Server 2012 R2 上使用 IIS Manager 6.2 来托管用于从六个 pi 终端收集时间打卡的 Intranet Web 应用程序。该应用是使用 Visual Studio 2017 创建的
Dim sqlConnection1 As New SqlClient.SqlConnection("Data Source=SLDB;Initial Catalog=SyteLine_AWP;Persist Security Info=True;User ID=sa;Password=sqladmin")
Dim cmd As New SqlClient.SqlCommand
Dim parm As New SqlParameter()
Server.ClearError()
Dim ex As Exception = Server.GetLastError
parm.Direction = Data.ParameterDirection.ReturnValue
parm.ParameterName = "ReturnValue"
cmd.Parameters.Add(parm)
cmd.CommandText = "AWP_TimeClock_Web"
cmd.CommandType = CommandType.StoredProcedure
cmd.Connection = sqlConnection1
cmd.Parameters.AddWithValue("@VAR_badge_num", badgenum)
cmd.Parameters("@VAR_badge_num").Direction = ParameterDirection.Input
cmd.Parameters.AddWithValue("@VAR_term_id", TermID)
cmd.Parameters("@VAR_term_id").Direction = ParameterDirection.Input
cmd.Parameters.Add("@VAR_emp_name", SqlDbType.VarChar, 40).Value = ""
cmd.Parameters("@VAR_emp_name").Direction = ParameterDirection.Output
cmd.Parameters.Add("@VAR_error", SqlDbType.Int, 1).Value = 0
cmd.Parameters("@VAR_error").Direction = ParameterDirection.Output
sqlConnection1.Open()
cmd.ExecuteNonQuery()
正如我之前所说,80% 到 90% 的时间都可以正常工作。在大量使用期间,任何数量的应用程序都会冻结,部分或全部最终会丢失并显示错误消息“存储过程失败”。我怀疑问题不在于存储过程,而在于连接到服务器的能力。虽然目前我无法排除任何可能。
【问题讨论】:
-
顺便说明一下:SQL Server 2008 和 2008 R2 目前不再提供扩展支持 - red-gate.com/simple-talk/sql/database-administration/… - 是时候升级了!
-
您是否尝试过将代码包装在
try-catch块中并在遇到此异常时添加一些重试逻辑? -
mjw - 是的,在存储过程中,但它似乎从未成功过。这就是让我认为它不是存储过程的原因。我确实将 IIS 服务器设置为在站点上创建错误日志,希望我可以获得更多信息。当然今天没有出错。
-
有关闭sql连接的代码吗?共享的代码似乎没有关闭连接或释放连接对象。
-
莫汉,我的理解是关闭连接命令是多余的。我已将其注释掉,因为它在激活时会引起另一个问题。