2016-03-30 22 views
1

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

İşte
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?

+1

'nolock''ü kaldırmayı denediniz mi? http://stackoverflow.com/a/29948293/123422 –

+0

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. –

cevap

0

BENİM UNSOMMITED ile aynı olan NOLOCK ipucunu kaldırdıktan sonra bunu çalışmaya başladım.

İlgili konular