Geçerli bir proje için sorgu bildirimleri uygulamak çalışıyorum. SqlDependency
kullanarak sorgu bildirimleri uyguluyorum. Sorguda doğrudan doğruya Ado.net komutunda satır içi SQL yaptığımda çalışabiliyorum, ancak saklı yordamda aynı kesin sorguyu koyduğumda, sorgu bildirimi işe yaramıyor gibi görünüyor. SqlNotificationEventArgs
içinde, olay hatalarının parametresindeki Sorgu (8) değerini döndürür. Aynı zamanda yakmaya devam ediyor. her 30 saniyede bir.SQL Server Sorgu Bildirimleri saklı yordamını kullanarak
Public Sub GetCust(ByVal CustomerId As String)
Dim oConn As SqlConnection
Dim connectionString As string
connectionString = GetConnectionString()
SqlDependency.Stop(connectionString)
SqlDependency.Start(connectionString)
oConn = New SqlConnection(connectionString)
'This is the code for the stored procedure path
'Dim oCommand As New SqlCommand("SelectCustomerInfo", oConn)
'oCommand.CommandType = CommandType.StoredProcedure
'oCommand.Parameters.AddWithValue("@CustomerId", CustomerId)
'This is the code for using inline SQL
Dim strSQL As String
strSQL = "select [CustomerId],[name], [age],[gender],[favorite_food] from dbo.custpreferences where customerid = '" & CustomerId & "'"
Dim oCommand As New SqlCommand(strSQL, oConn)
oCommand.CommandType = CommandType.Text
oCommand.Notification = Nothing
Dim dep As SqlDependency = New SqlDependency(oCommand)
AddHandler dep.OnChange, AddressOf cust_onchange
oConn.Open()
Dim dataAdapter As SqlDataAdapter = New SqlDataAdapter(oCommand)
dataAdapter.Fill(dsCustomers)
If (Not dataAdapter Is Nothing) Then dataAdapter.Dispose()
If Not oConn Is Nothing Then oConn.Dispose()
End Sub
Private Sub cust_onchange(ByVal sender As System.Object, ByVal e As System.Data.SqlClient.SqlNotificationEventArgs)
GetCustInfo(mCustomer.strCustomerID)
Dim dep As SqlDependency = DirectCast(sender, SqlDependency)
RemoveHandler dep.OnChange, AddressOf cust_onchange
End Sub
saklı yordam var:
SET ANSI_NULLS ON
GO
SET ANSI_PADDING ON
GO
SET ANSI_WARNINGS ON
GO
SET CONCAT_NULL_YIELDS_NULL ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET NUMERIC_ROUNDABORT OFF
GO
SET ARITHABORT ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[SelectCustInfo]
@CustomerID VARCHAR(6)
AS
SELECT
[CustomerId], [name], [age], [gender], [favorite_food]
FROM
dbo.CustInfo (NOLOCK)
WHERE
(CustomerId = @CustomerID)
bu bir saklı yordam kullanarak vs satır içi SQL ile çalışır neden bir fikir?
'nolock''ü kaldırmayı denediniz mi? http://stackoverflow.com/a/29948293/123422 –
Merhaba @PaulAbbott. Öneri için teşekkürler. Bazı nedenlerden dolayı bunu kaldırmayı düşünmedim. Yaptığımda, işe yaradı. Yanıt için teşekkürler. –