Asp.Net应用程序随机锁定多个用户

时间:2014-05-15 20:19:17

标签: c# asp.net sql-server visual-studio

技术 - Asp.Net 4.5,SqlServer 2012

我有一个(母版Web应用程序)似乎随机锁定了执行sql查询,插入或更新的函数。这些查询用于填充GridView,ListView,DataTable,以查找发生请求或回发的任何页面。

如果只有一个用户,则没有锁定或错误。如果多个用户打开,则会随机锁定错误。错误堆栈跟踪指向具有数据库交互的函数。 stacktrace的最后一行是" ProcessRequestMain"。我似乎无法想出这个。还有其他人遇到过这个问题吗?

错误消息详情:

Object reference not set to an instance of an object.

错误StackTrace:

at MudderTrucks.Items.LoadItems()
at MudderTrucks.Items.Page_Load(Oject.sender, EventArgs e)
at System.Web.UI.Control.OnLoad(EventArgs e)
at System.Web.UI.Control.LoadRecursive()
at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)

2 个答案:

答案 0 :(得分:0)

我会检查你是否有未提交的事务,因为这会导致表锁。 还要确保数据库连接正在关闭。

答案 1 :(得分:0)

问题:模块中的连接变量。我忽略了这一点。

Dim MyConnection As New SqlClient.SqlConnection( _
        ConfigurationManager.ConnectionStrings("MyConnection").ConnectionString)

答案:删除模块级变量并将其作为参数添加到您的函数中

Public Function GetData2(ByVal Sql As String, _
         MyConnection As SqlClient.SqlConnection) As DataTable

    '...code...'

End Function

注意:作为在模块中使用公共函数的更好的替代方法,我创建了一个PageBase类,并在需要这些函数的页面上继承它。我在类的顶部添加了连接变量,因为它只将它暴露给继承它的页面。或者......您可以在后面的页面代码中创建连接并将其传递给函数。

页面代码背后

Public Class MyPage
    Inherits PageBase

End Class

PageBase Class

Public Class PageBase
    Inherits System.Web.UI.Page

    Public MyConnection As New SqlClient.SqlConnection( _
        ConfigurationManager.ConnectionStrings("MyConnection").ConnectionString)

    Public Function GetData2(ByVal Sql As String) As DataTable

        '...code...'

    End Function

End Class

结论:我尝试了这两种方法,并修复了发布的问题。

相关问题