Đây là một điều kỳ lạ. Tôi đang tìm kiếm các ý tưởng về cách đặt câu hỏi đúng như tôi là một giải pháp thực tế.Dữ liệu người dùng ASP.net nhận được sự chuyển giao giữa những người dùng truy cập các đối tượng
Tôi có một trang web và chúng tôi vừa có một bước nhảy vọt trong lưu lượng truy cập. Bây giờ tất cả các đột ngột chúng tôi đang nhận được lỗi tham số sql trái và phải. Chúng tôi đã chuyển sang một máy chủ sql mới một vài tuần trước và mọi thứ đều ổn nhưng lưu lượng truy cập bổ sung dường như đang phá vỡ chúng tôi.
Tôi có lớp truy cập dữ liệu được gọi khi mỗi người dùng truy cập để đăng nhập. Nó chạy qua một số tác vụ trước khi cuối cùng cập nhật ngày đăng nhập cuối cùng của người dùng và chuyển tiếp họ đến phần quản trị.
Những gì tôi thấy từ nhật ký theo dõi cho thấy khi tôi đăng nhập vào một số tác vụ đầu tiên đang sử dụng dữ liệu của mình (cho phép người dùng = birk pass = word). Nhưng tại một số điểm, lớp truy cập bắt đầu gửi dữ liệu từ người khác đang cố gắng đăng nhập (cho phép người dùng = abcxyz)
Mọi kết nối mà chúng tôi thực hiện với máy chủ đều bị đóng khi chúng tôi kết thúc. Tôi vô hiệu hóa tất cả các đối tượng accessor khi tôi kết thúc với chúng. Nhưng bằng cách nào đó dữ liệu người dùng khác nhau từ các phiên khác nhau đang thực hiện theo cách của họ vào các trường hợp khác của đối tượng.
Tôi không sử dụng phiên/ứng dụng/bộ nhớ cache/viewstate để lưu trữ các đối tượng, vì vậy tôi không thực sự thấy cách họ có thể chỉnh sửa eachother ... Nó thực sự kỳ lạ và tôi không chắc chắn làm thế nào để thậm chí đi về nghiên cứu vấn đề.
này được khoảng lớp accessor ... Tôi cắt ra một số trong những phần mà không phụ thuộc vào vấn đề
Imports Microsoft.VisualBasic
Imports System.Data
Imports System.Data.SqlClient
Imports System.Text.RegularExpressions
Imports System.Text
Imports System.IO
Namespace ABC
Public Class DataAccess
Public Class SQL
Dim objConnection As SqlConnection
Dim objAdapter As SqlDataAdapter
Dim objDataset As DataSet
Dim objTable As DataTable
Dim strSQL As String
Dim strCommandType As String
Shared sqlparams As List(Of param)
Public params As New Parameters
Shadows Application As HttpApplicationState = HttpContext.Current.Application
Shadows Server As HttpServerUtility = HttpContext.Current.Server
Shadows Response As HttpResponse = HttpContext.Current.Response
Shadows Session As HttpSessionState = HttpContext.Current.Session
Public Sub New()
Connection()
End Sub
Public Sub New(ByVal startingSql As String)
Connection()
sql = startingSql
End Sub
Private Sub Connection()
sqlparams = New List(Of param)
objConnection = New SqlConnection(ConfigurationManager.ConnectionStrings("sqlServerProd").ConnectionString)
End Sub
Public Function DataNQ(ByVal type As CommandType, Optional ByVal query As String = "") As Boolean
If query <> "" Then
sql = query
End If
Dim objCommand As SqlCommand
Try
objConnection.Open()
Catch ex As Exception
objConnection.Close()
objConnection.Open()
End Try
objCommand = New SqlCommand(sql, objConnection)
objCommand.CommandType = type
Dim cmd As New SqlCommand
HttpContext.Current.Trace.Warn(sql)
'HttpContext.Current.Trace.Write("Adding " & sqlparams.Count & " parameters")
HttpContext.Current.Trace.Warn(params.writeParams)
If sqlparams.Count > 0 Then
For Each p As param In sqlparams
Dim sparam As SqlParameter = p.makeParam
HttpContext.Current.Trace.Write(sparam.DbType.ToString, sparam.ParameterName & "=" & sparam.Value)
objCommand.Parameters.Add(p.makeParam)
Next
sqlparams = New List(Of param)
End If
HttpContext.Current.Trace.Warn("Successfully added " & objCommand.Parameters.Count & " parameters")
HttpContext.Current.Trace.Warn(params.writeParams)
'-- Create a SqlParameter object to hold the output parameter value
Dim paramRetVal As New SqlParameter("@RETURN_VALUE", SqlDbType.Int)
'-- Must set .Direction as ReturnValue
paramRetVal.Direction = ParameterDirection.ReturnValue
'-- Finally, add the parameter to the Command's Parameters collection
objCommand.Parameters.Add(paramRetVal)
'-- Call the sproc...
Dim reader As SqlDataReader = objCommand.ExecuteReader()
'Now you can grab the output parameter's value...
Dim intRetVal As Integer = Convert.ToInt32(paramRetVal.Value)
If intRetVal = 0 Then
objConnection.Close()
objCommand = Nothing
reader = Nothing
Return True
Else
objConnection.Close()
objCommand = Nothing
reader = Nothing
Return False
End If
objConnection.Close()
End Function
Public Sub freeResources()
sqlparams = Nothing
params = Nothing
objConnection = Nothing
objAdapter = Nothing
objDataset = Nothing
objTable = Nothing
strSQL = Nothing
strCommandType = Nothing
End Sub
Public Sub add(ByVal parameterName As String, ByVal dbType As System.Data.SqlDbType, ByVal size As Integer, ByRef value As Object)
HttpContext.Current.Trace.Write("adding param name/type/size/value", parameterName & " " & value)
Dim p As param
p = New param(parameterName, dbType, size, value)
p.Value = value
sqlparams.Add(p)
End Sub
Private Class param
Public name As String = Nothing
Public size As Integer = Nothing
Public type As System.Data.SqlDbType = Nothing
Public value As Object = Nothing
Public Function makeParam() As SqlParameter
HttpContext.Current.Trace.Warn("before make param name=" & name & " type=" & type.ToString & " value=" & value)
Dim p As New SqlParameter(name, type)
If size <> Nothing Then
p.Size = size
End If
p.Value = value
HttpContext.Current.Trace.Warn("after make param name=" & p.ParameterName & " type=" & p.DbType.ToString)
Return p
End Function
Public Sub New(ByVal pname As String, ByRef ptype As System.Data.SqlDbType, ByRef val As Object)
'HttpContext.Current.Trace.Write("new param object name/type/value name=" & pname & " type=" & ptype.ToString)
name = pname
type = ptype
value = val
'HttpContext.Current.Trace.Warn("added param name=" & name & " type=" & type.ToString)
End Sub
End Class
End Class
End Class
BẤT CỨ ý tưởng hay suy nghĩ sẽ là tuyệt vời. Cảm ơn
Tại sao "sqlparams" được khai báo là được chia sẻ? –
Tôi trang bị thêm lớp để làm việc với các trang cũ hơn mà không yêu cầu thay đổi mã và tại thời điểm rời khỏi trang này khi được chia sẻ dường như phù hợp với nhu cầu tốt hơn so với thêm thuộc tính có tên sqlparams. Đó là giá trị một viết lại mặc dù. – Birk