技术 - 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)
答案 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
结论:我尝试了这两种方法,并修复了发布的问题。