对于SQL数据库中的某些更改,我必须使用SqlDependency使Notifier变得容易。我搜索了所有在线指南,但它没有用。我也见过SqlDependency notification - immediate failure notification after executing query和这个https://msdn.microsoft.com/en-us/library/ms181122.aspx解决方案数据库在SQL Server 2012上,结构如下:
这是我要通知的表格:
这是我的实际数据库选项:
我还为用户设置了Service Broker和权限。
我的代码结构如下:
var info = new SABIntegrationEntities1();
using (var notifer = new EntityChangeNotifier<SpRicezioneSpedizioniLight, SABIntegrationEntities1>(p => p.SPEDIZIONE_STATO_GENERAZIONE != "I"))
{
notifer.Error += (sender, e) =>
{
Console.WriteLine("[{0}, {1}, {2}]:\n{3}", e.Reason.Info, e.Reason.Source, e.Reason.Type, e.Sql);
};
notifer.Changed += (sender, e) =>
{
p.SPEDIZIONE_STATO_GENERAZIONE = "G";
};
}
来自互联网的另一个项目的功能正常:
public EntityChangeNotifier(Expression<Func<TEntity, bool>> query)
{
_context = new TDbContext();
_query = query;
_connectionString = _context.Database.Connection.ConnectionString;
SafeCountDictionary.Increment(_connectionString, x => { SqlDependency.Start(x); });
RegisterNotification();
}
private void RegisterNotification()
{
_context = new TDbContext();
using (SqlConnection connection = new SqlConnection(_connectionString))
{
using (SqlCommand command = GetCommand())
{
command.Connection = connection;
connection.Open();
var sqlDependency = new SqlDependency(command);
sqlDependency.OnChange += new OnChangeEventHandler(_sqlDependency_OnChange);
// NOTE: You have to execute the command, or the notification will never fire.
using (SqlDataReader reader = command.ExecuteReader())
{
}
}
}
}
当通知开始时,项目立即进入notifier.error并出现以下异常:
> 2016-04-11 09:56:33,340 [12108] ERROR TestWINEOWINE.Form1 - [Invalid, Statement, Subscribe]:
SELECT
[Extent1].[AudOperation] AS [AudOperation],
[Extent1].[AudDateLog] AS [AudDateLog],
[Extent1].[PROGRESSIVO] AS [PROGRESSIVO],
[Extent1].[SOCIETA] AS [SOCIETA],
[Extent1].[SPEDIZIONE_STATO_GENERAZIONE] AS [SPEDIZIONE_STATO_GENERAZIONE],
[Extent1].[SPEDIZIONE_TIPO] AS [SPEDIZIONE_TIPO],
[Extent1].[SPEDIZIONE_ANNO] AS [SPEDIZIONE_ANNO],
[Extent1].[SPEDIZIONE_FILIALE] AS [SPEDIZIONE_FILIALE],
[Extent1].[SPEDIZIONE_NUMERO] AS [SPEDIZIONE_NUMERO],
[Extent1].[TERRA_MARE_AEREO] AS [TERRA_MARE_AEREO],
[Extent1].[IMPORT_EXPORT] AS [IMPORT_EXPORT],
[Extent1].[FILIALE] AS [FILIALE],
[Extent1].[TIPO_SERVIZIO] AS [TIPO_SERVIZIO],
[Extent1].[TIPO_TRASPORTO] AS [TIPO_TRASPORTO],
[Extent1].[PRIORITA] AS [PRIORITA],
[Extent1].[SETTORE] AS [SETTORE],
[Extent1].[RIFERIMENTO_COMMITTENTE] AS [RIFERIMENTO_COMMITTENTE],
[Extent1].[RIFERIMENTO_ORDINE] AS [RIFERIMENTO_ORDINE],
[Extent1].[RIFERIMENTO_INTERNO] AS [RIFERIMENTO_INTERNO],
[Extent1].[RIFERIMENTO_INTERNO_EXTRA] AS [RIFERIMENTO_INTERNO_EXTRA],
[Extent1].[RESA] AS [RESA],
[Extent1].[LINEA] AS [LINEA],
[Extent1].[MERCE_CODICE] AS [MERCE_CODICE],
[Extent1].[MERCE_DESCRIZIONE] AS [MERCE_DESCRIZIONE],
[Extent1].[COMMITTENTE] AS [COMMITTENTE],
[Extent1].[TIPO_VEICOLO_RICHIESTO] AS [TIPO_VEICOLO_RICHIESTO],
[Extent1].[ASSICURAZIONE_VALUTA] AS [ASSICURAZIONE_VALUTA],
[Extent1].[ASSICURAZIONE_IMPORTO] AS [ASSICURAZIONE_IMPORTO],
[Extent1].[PESO_LORDO] AS [PESO_LORDO],
[Extent1].[PESO_NETTO] AS [PESO_NETTO],
[Extent1].[VOLUME] AS [VOLUME],
[Extent1].[METRI_LINEARI] AS [METRI_LINEARI],
[Extent1].[IMBALLI] AS [IMBALLI],
[Extent1].[PALETTE] AS [PALETTE],
[Extent1].[ARRIVO_TIPO] AS [ARRIVO_TIPO],
[Extent1].[ARRIVO_DATA_ORA] AS [ARRIVO_DATA_ORA],
[Extent1].[ARRIVO_CORRISPONDENTE] AS [ARRIVO_CORRISPONDENTE],
[Extent1].[ARRIVO_DEPOSITO] AS [ARRIVO_DEPOSITO],
[Extent1].[ARRIVO_UBICAZIONE] AS [ARRIVO_UBICAZIONE],
[Extent1].[CONSEGNA_TIPO] AS [CONSEGNA_TIPO],
[Extent1].[CONSEGNA_DATA_ORA_RICHIESTA_TIPO] AS [CONSEGNA_DATA_ORA_RICHIESTA_TIPO],
[Extent1].[CONSEGNA_DATA_ORA_RICHIESTA_INIZIO] AS [CONSEGNA_DATA_ORA_RICHIESTA_INIZIO],
[Extent1].[CONSEGNA_DATA_ORA_RICHIESTA_FINE] AS [CONSEGNA_DATA_ORA_RICHIESTA_FINE],
[Extent1].[CONSEGNA_PREAVVISO] AS [CONSEGNA_PREAVVISO],
[Extent1].[CONSEGNA_CORRISPONDENTE] AS [CONSEGNA_CORRISPONDENTE],
[Extent1].[CONSEGNA_DEPOSITO] AS [CONSEGNA_DEPOSITO],
[Extent1].[MITTENTE_RAGIONE_SOCIALE] AS [MITTENTE_RAGIONE_SOCIALE],
[Extent1].[MITTENTE_INDIRIZZO] AS [MITTENTE_INDIRIZZO],
[Extent1].[MITTENTE_CAP] AS [MITTENTE_CAP],
[Extent1].[MITTENTE_LOCALITA] AS [MITTENTE_LOCALITA],
[Extent1].[MITTENTE_SITO] AS [MITTENTE_SITO],
[Extent1].[MITTENTE_PROVINCIA] AS [MITTENTE_PROVINCIA],
[Extent1].[MITTENTE_NAZIONE] AS [MITTENTE_NAZIONE],
[Extent1].[MITTENTE_ZONA] AS [MITTENTE_ZONA],
[Extent1].[MITTENTE_RIFERIMENTO] AS [MITTENTE_RIFERIMENTO],
[Extent1].[DESTINATARIO_RAGIONE_SOCIALE] AS [DESTINATARIO_RAGIONE_SOCIALE],
[Extent1].[DESTINATARIO_INDIRIZZO] AS [DESTINATARIO_INDIRIZZO],
[Extent1].[DESTINATARIO_CAP] AS [DESTINATARIO_CAP],
[Extent1].[DESTINATARIO_LOCALITA] AS [DESTINATARIO_LOCALITA],
[Extent1].[DESTINATARIO_SITO] AS [DESTINATARIO_SITO],
[Extent1].[DESTINATARIO_PROVINCIA] AS [DESTINATARIO_PROVINCIA],
[Extent1].[DESTINATARIO_NAZIONE] AS [DESTINATARIO_NAZIONE],
[Extent1].[DESTINATARIO_ZONA] AS [DESTINATARIO_ZONA],
[Extent1].[DESTINATARIO_RIFERIMENTO] AS [DESTINATARIO_RIFERIMENTO],
[Extent1].[PROVENIENZA_RAGIONE_SOCIALE] AS [PROVENIENZA_RAGIONE_SOCIALE],
[Extent1].[PROVENIENZA_INDIRIZZO] AS [PROVENIENZA_INDIRIZZO],
[Extent1].[PROVENIENZA_CAP] AS [PROVENIENZA_CAP],
[Extent1].[PROVENIENZA_LOCALITA] AS [PROVENIENZA_LOCALITA],
[Extent1].[PROVENIENZA_SITO] AS [PROVENIENZA_SITO],
[Extent1].[PROVENIENZA_PROVINCIA] AS [PROVENIENZA_PROVINCIA],
[Extent1].[PROVENIENZA_NAZIONE] AS [PROVENIENZA_NAZIONE],
[Extent1].[PROVENIENZA_ZONA] AS [PROVENIENZA_ZONA],
[Extent1].[DESTINAZIONE_RAGIONE_SOCIALE] AS [DESTINAZIONE_RAGIONE_SOCIALE],
[Extent1].[DESTINAZIONE_INDIRIZZO] AS [DESTINAZIONE_INDIRIZZO],
[Extent1].[DESTINAZIONE_CAP] AS [DESTINAZIONE_CAP],
[Extent1].[DESTINAZIONE_LOCALITA] AS [DESTINAZIONE_LOCALITA],
[Extent1].[DESTINAZIONE_SITO] AS [DESTINAZIONE_SITO],
[Extent1].[DESTINAZIONE_PROVINCIA] AS [DESTINAZIONE_PROVINCIA],
[Extent1].[DESTINAZIONE_NAZIONE] AS [DESTINAZIONE_NAZIONE],
[Extent1].[DESTINAZIONE_ZONA] AS [DESTINAZIONE_ZONA],
[Extent1].[VERIFICA_MERCE] AS [VERIFICA_MERCE],
[Extent1].[DDT_DATA] AS [DDT_DATA],
[Extent1].[DDT_NUMERO] AS [DDT_NUMERO],
[Extent1].[ID_STAMPANTE] AS [ID_STAMPANTE],
[Extent1].[CONSEGNA_TIPO_SERVIZIO] AS [CONSEGNA_TIPO_SERVIZIO],
[Extent1].[ORDINAMENTO] AS [ORDINAMENTO],
[Extent1].[DESTINATARIO_INTERLOCUTORE_TIPO] AS [DESTINATARIO_INTERLOCUTORE_TIPO],
[Extent1].[DESTINATARIO_INTERLOCUTORE_NOMINATIVO] AS [DESTINATARIO_INTERLOCUTORE_NOMINATIVO],
[Extent1].[DESTINATARIO_INTERLOCUTORE_E_MAIL] AS [DESTINATARIO_INTERLOCUTORE_E_MAIL],
[Extent1].[DESTINATARIO_INTERLOCUTORE_CELLULARE] AS [DESTINATARIO_INTERLOCUTORE_CELLULARE]
FROM (SELECT
[SpRicezioneSpedizioniLight].[AudOperation] AS [AudOperation],
[SpRicezioneSpedizioniLight].[AudDateLog] AS [AudDateLog],
[SpRicezioneSpedizioniLight].[PROGRESSIVO] AS [PROGRESSIVO],
[SpRicezioneSpedizioniLight].[SOCIETA] AS [SOCIETA],
[SpRicezioneSpedizioniLight].[SPEDIZIONE_STATO_GENERAZIONE] AS [SPEDIZIONE_STATO_GENERAZIONE],
[SpRicezioneSpedizioniLight].[SPEDIZIONE_TIPO] AS [SPEDIZIONE_TIPO],
[SpRicezioneSpedizioniLight].[SPEDIZIONE_ANNO] AS [SPEDIZIONE_ANNO],
[SpRicezioneSpedizioniLight].[SPEDIZIONE_FILIALE] AS [SPEDIZIONE_FILIALE],
[SpRicezioneSpedizioniLight].[SPEDIZIONE_NUMERO] AS [SPEDIZIONE_NUMERO],
[SpRicezioneSpedizioniLight].[TERRA_MARE_AEREO] AS [TERRA_MARE_AEREO],
[SpRicezioneSpedizioniLight].[IMPORT_EXPORT] AS [IMPORT_EXPORT],
[SpRicezioneSpedizioniLight].[FILIALE] AS [FILIALE],
[SpRicezioneSpedizioniLight].[TIPO_SERVIZIO] AS [TIPO_SERVIZIO],
[SpRicezioneSpedizioniLight].[TIPO_TRASPORTO] AS [TIPO_TRASPORTO],
[SpRicezioneSpedizioniLight].[PRIORITA] AS [PRIORITA],
[SpRicezioneSpedizioniLight].[SETTORE] AS [SETTORE],
[SpRicezioneSpedizioniLight].[RIFERIMENTO_COMMITTENTE] AS [RIFERIMENTO_COMMITTENTE],
[SpRicezioneSpedizioniLight].[RIFERIMENTO_ORDINE] AS [RIFERIMENTO_ORDINE],
[SpRicezioneSpedizioniLight].[RIFERIMENTO_INTERNO] AS [RIFERIMENTO_INTERNO],
[SpRicezioneSpedizioniLight].[RIFERIMENTO_INTERNO_EXTRA] AS [RIFERIMENTO_INTERNO_EXTRA],
[SpRicezioneSpedizioniLight].[RESA] AS [RESA],
[SpRicezioneSpedizioniLight].[LINEA] AS [LINEA],
[SpRicezioneSpedizioniLight].[MERCE_CODICE] AS [MERCE_CODICE],
[SpRicezioneSpedizioniLight].[MERCE_DESCRIZIONE] AS [MERCE_DESCRIZIONE],
[SpRicezioneSpedizioniLight].[COMMITTENTE] AS [COMMITTENTE],
[SpRicezioneSpedizioniLight].[TIPO_VEICOLO_RICHIESTO] AS [TIPO_VEICOLO_RICHIESTO],
[SpRicezioneSpedizioniLight].[ASSICURAZIONE_VALUTA] AS [ASSICURAZIONE_VALUTA],
[SpRicezioneSpedizioniLight].[ASSICURAZIONE_IMPORTO] AS [ASSICURAZIONE_IMPORTO],
[SpRicezioneSpedizioniLight].[PESO_LORDO] AS [PESO_LORDO],
[SpRicezioneSpedizioniLight].[PESO_NETTO] AS [PESO_NETTO],
[SpRicezioneSpedizioniLight].[VOLUME] AS [VOLUME],
[SpRicezioneSpedizioniLight].[METRI_LINEARI] AS [METRI_LINEARI],
[SpRicezioneSpedizioniLight].[IMBALLI] AS [IMBALLI],
[SpRicezioneSpedizioniLight].[PALETTE] AS [PALETTE],
[SpRicezioneSpedizioniLight].[ARRIVO_TIPO] AS [ARRIVO_TIPO],
[SpRicezioneSpedizioniLight].[ARRIVO_DATA_ORA] AS [ARRIVO_DATA_ORA],
[SpRicezioneSpedizioniLight].[ARRIVO_CORRISPONDENTE] AS [ARRIVO_CORRISPONDENTE],
[SpRicezioneSpedizioniLight].[ARRIVO_DEPOSITO] AS [ARRIVO_DEPOSITO],
[SpRicezioneSpedizioniLight].[ARRIVO_UBICAZIONE] AS [ARRIVO_UBICAZIONE],
[SpRicezioneSpedizioniLight].[CONSEGNA_TIPO] AS [CONSEGNA_TIPO],
[SpRicezioneSpedizioniLight].[CONSEGNA_DATA_ORA_RICHIESTA_TIPO] AS [CONSEGNA_DATA_ORA_RICHIESTA_TIPO],
[SpRicezioneSpedizioniLight].[CONSEGNA_DATA_ORA_RICHIESTA_INIZIO] AS [CONSEGNA_DATA_ORA_RICHIESTA_INIZIO],
[SpRicezioneSpedizioniLight].[CONSEGNA_DATA_ORA_RICHIESTA_FINE] AS [CONSEGNA_DATA_ORA_RICHIESTA_FINE],
[SpRicezioneSpedizioniLight].[CONSEGNA_PREAVVISO] AS [CONSEGNA_PREAVVISO],
[SpRicezioneSpedizioniLight].[CONSEGNA_CORRISPONDENTE] AS [CONSEGNA_CORRISPONDENTE],
[SpRicezioneSpedizioniLight].[CONSEGNA_DEPOSITO] AS [CONSEGNA_DEPOSITO],
[SpRicezioneSpedizioniLight].[MITTENTE_RAGIONE_SOCIALE] AS [MITTENTE_RAGIONE_SOCIALE],
[SpRicezioneSpedizioniLight].[MITTENTE_INDIRIZZO] AS [MITTENTE_INDIRIZZO],
[SpRicezioneSpedizioniLight].[MITTENTE_CAP] AS [MITTENTE_CAP],
[SpRicezioneSpedizioniLight].[MITTENTE_LOCALITA] AS [MITTENTE_LOCALITA],
[SpRicezioneSpedizioniLight].[MITTENTE_SITO] AS [MITTENTE_SITO],
[SpRicezioneSpedizioniLight].[MITTENTE_PROVINCIA] AS [MITTENTE_PROVINCIA],
[SpRicezioneSpedizioniLight].[MITTENTE_NAZIONE] AS [MITTENTE_NAZIONE],
[SpRicezioneSpedizioniLight].[MITTENTE_ZONA] AS [MITTENTE_ZONA],
[SpRicezioneSpedizioniLight].[MITTENTE_RIFERIMENTO] AS [MITTENTE_RIFERIMENTO],
[SpRicezioneSpedizioniLight].[DESTINATARIO_RAGIONE_SOCIALE] AS [DESTINATARIO_RAGIONE_SOCIALE],
[SpRicezioneSpedizioniLight].[DESTINATARIO_INDIRIZZO] AS [DESTINATARIO_INDIRIZZO],
[SpRicezioneSpedizioniLight].[DESTINATARIO_CAP] AS [DESTINATARIO_CAP],
[SpRicezioneSpedizioniLight].[DESTINATARIO_LOCALITA] AS [DESTINATARIO_LOCALITA],
[SpRicezioneSpedizioniLight].[DESTINATARIO_SITO] AS [DESTINATARIO_SITO],
[SpRicezioneSpedizioniLight].[DESTINATARIO_PROVINCIA] AS [DESTINATARIO_PROVINCIA],
[SpRicezioneSpedizioniLight].[DESTINATARIO_NAZIONE] AS [DESTINATARIO_NAZIONE],
[SpRicezioneSpedizioniLight].[DESTINATARIO_ZONA] AS [DESTINATARIO_ZONA],
[SpRicezioneSpedizioniLight].[DESTINATARIO_RIFERIMENTO] AS [DESTINATARIO_RIFERIMENTO],
[SpRicezioneSpedizioniLight].[PROVENIENZA_RAGIONE_SOCIALE] AS [PROVENIENZA_RAGIONE_SOCIALE],
[SpRicezioneSpedizioniLight].[PROVENIENZA_INDIRIZZO] AS [PROVENIENZA_INDIRIZZO],
[SpRicezioneSpedizioniLight].[PROVENIENZA_CAP] AS [PROVENIENZA_CAP],
[SpRicezioneSpedizioniLight].[PROVENIENZA_LOCALITA] AS [PROVENIENZA_LOCALITA],
[SpRicezioneSpedizioniLight].[PROVENIENZA_SITO] AS [PROVENIENZA_SITO],
[SpRicezioneSpedizioniLight].[PROVENIENZA_PROVINCIA] AS [PROVENIENZA_PROVINCIA],
[SpRicezioneSpedizioniLight].[PROVENIENZA_NAZIONE] AS [PROVENIENZA_NAZIONE],
[SpRicezioneSpedizioniLight].[PROVENIENZA_ZONA] AS [PROVENIENZA_ZONA],
[SpRicezioneSpedizioniLight].[DESTINAZIONE_RAGIONE_SOCIALE] AS [DESTINAZIONE_RAGIONE_SOCIALE],
[SpRicezioneSpedizioniLight].[DESTINAZIONE_INDIRIZZO] AS [DESTINAZIONE_INDIRIZZO],
[SpRicezioneSpedizioniLight].[DESTINAZIONE_CAP] AS [DESTINAZIONE_CAP],
[SpRicezioneSpedizioniLight].[DESTINAZIONE_LOCALITA] AS [DESTINAZIONE_LOCALITA],
[SpRicezioneSpedizioniLight].[DESTINAZIONE_SITO] AS [DESTINAZIONE_SITO],
[SpRicezioneSpedizioniLight].[DESTINAZIONE_PROVINCIA] AS [DESTINAZIONE_PROVINCIA],
[SpRicezioneSpedizioniLight].[DESTINAZIONE_NAZIONE] AS [DESTINAZIONE_NAZIONE],
[SpRicezioneSpedizioniLight].[DESTINAZIONE_ZONA] AS [DESTINAZIONE_ZONA],
[SpRicezioneSpedizioniLight].[VERIFICA_MERCE] AS [VERIFICA_MERCE],
[SpRicezioneSpedizioniLight].[DDT_DATA] AS [DDT_DATA],
[SpRicezioneSpedizioniLight].[DDT_NUMERO] AS [DDT_NUMERO],
[SpRicezioneSpedizioniLight].[ID_STAMPANTE] AS [ID_STAMPANTE],
[SpRicezioneSpedizioniLight].[CONSEGNA_TIPO_SERVIZIO] AS [CONSEGNA_TIPO_SERVIZIO],
[SpRicezioneSpedizioniLight].[ORDINAMENTO] AS [ORDINAMENTO],
[SpRicezioneSpedizioniLight].[DESTINATARIO_INTERLOCUTORE_TIPO] AS [DESTINATARIO_INTERLOCUTORE_TIPO],
[SpRicezioneSpedizioniLight].[DESTINATARIO_INTERLOCUTORE_NOMINATIVO] AS [DESTINATARIO_INTERLOCUTORE_NOMINATIVO],
[SpRicezioneSpedizioniLight].[DESTINATARIO_INTERLOCUTORE_E_MAIL] AS [DESTINATARIO_INTERLOCUTORE_E_MAIL],
[SpRicezioneSpedizioniLight].[DESTINATARIO_INTERLOCUTORE_CELLULARE] AS [DESTINATARIO_INTERLOCUTORE_CELLULARE]
FROM [aud].[SpRicezioneSpedizioniLight] AS [SpRicezioneSpedizioniLight]) AS [Extent1]
WHERE 'I' = [Extent1].[SPEDIZIONE_STATO_GENERAZIONE]
我不知道该怎么做。