EDIT:修正済みです。私がやったことは、データベースの所有者を、私がそれに接続するのに使ったユーザーとは違ったものに変更することでした。データベース所有者を確認するには:SqlDependencyはOnChangeイベントを発生させません。
select name, suser_sname(owner_sid) from sys.databases
を所有者を変更するには:
ALTER AUTHORIZATION ON DATABASE::ISS TO sa;
これはかなりそれだった、私はまだその理由を知らないが、それはそううん、クールな作品。 (以前のdbownerがいくつかの権利を失っていたのかもしれません)
これは私に長すぎる頭痛を与えています。なぜこれが起こっているのか全く分かりません。私はMark Nischalkeのプロジェクトをhttp://www.codeproject.com/Articles/12335/Using-SqlDependency-for-data-change-eventsから取りました。プロジェクトにはデータベースを作成するためのSQLスクリプトと、プロジェクト/データベースにSqlDependecyの起動があります。今私は以前のデータベースに問題があることを知り、スクリプトをコピーして自分のデータベースを作成しました。テーブルを除いてすべてが同じです(明らかに)。これは、同じ構成のデータベースを別のデータベースにも持っているので、私のSqlDependencyが機能するはずです。しかし、いいえ...それは動作しません。この時点で私のプロジェクトで私は彼のデータベースの通知を確認するSqlDependecyを変更し、それは動作しますので、私のプロジェクトでは.NETの問題ではありません。その後、私は彼のプロジェクトチェックの私のデータベースとSopeDependencyを作成しようとしましたが、まだ動作しません。どちらの場合も、同じ接続文字列、統合されたセキュリティを使用しますが、初期カタログは異なります。助けてくれてありがとう。
これは彼のデータベース作成スクリプトが
です(私はプロジェクトSqlDependecy.Stopが、イベントイマイチ」発射を閉じたときにもメッセージキューは、私のデータベースに作成され、削除され、注意する)
USE [master]
GO
/****** Object: Database [Chatter] Script Date: 11/18/2005 13:55:20 ******/
CREATE DATABASE [Chatter] ON PRIMARY
(NAME = N'Chatter', FILENAME = N'D:\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\Chatter.mdf' , SIZE = 5120KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB)
LOG ON
(NAME = N'Chatter_log', FILENAME = N'D:\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\Chatter_log.ldf' , SIZE = 1536KB , MAXSIZE = 2048GB , FILEGROWTH = 10%)
COLLATE SQL_Latin1_General_CP1_CI_AS
GO
EXEC dbo.sp_dbcmptlevel @dbname=N'Chatter', @new_cmptlevel=90
GO
IF (1 = FULLTEXTSERVICEPROPERTY('IsFullTextInstalled'))
begin
EXEC [Chatter].[dbo].[sp_fulltext_database] @action = 'disable'
end
GO
ALTER DATABASE [Chatter] SET ANSI_NULL_DEFAULT OFF
GO
ALTER DATABASE [Chatter] SET ANSI_NULLS OFF
GO
ALTER DATABASE [Chatter] SET ANSI_PADDING OFF
GO
ALTER DATABASE [Chatter] SET ANSI_WARNINGS OFF
GO
ALTER DATABASE [Chatter] SET ARITHABORT OFF
GO
ALTER DATABASE [Chatter] SET AUTO_CLOSE OFF
GO
ALTER DATABASE [Chatter] SET AUTO_CREATE_STATISTICS ON
GO
ALTER DATABASE [Chatter] SET AUTO_SHRINK OFF
GO
ALTER DATABASE [Chatter] SET AUTO_UPDATE_STATISTICS ON
GO
ALTER DATABASE [Chatter] SET CURSOR_CLOSE_ON_COMMIT OFF
GO
ALTER DATABASE [Chatter] SET CURSOR_DEFAULT GLOBAL
GO
ALTER DATABASE [Chatter] SET CONCAT_NULL_YIELDS_NULL OFF
GO
ALTER DATABASE [Chatter] SET NUMERIC_ROUNDABORT OFF
GO
ALTER DATABASE [Chatter] SET QUOTED_IDENTIFIER OFF
GO
ALTER DATABASE [Chatter] SET RECURSIVE_TRIGGERS OFF
GO
ALTER DATABASE [Chatter] SET ENABLE_BROKER
GO
ALTER DATABASE [Chatter] SET AUTO_UPDATE_STATISTICS_ASYNC OFF
GO
ALTER DATABASE [Chatter] SET DATE_CORRELATION_OPTIMIZATION OFF
GO
ALTER DATABASE [Chatter] SET TRUSTWORTHY OFF
GO
ALTER DATABASE [Chatter] SET ALLOW_SNAPSHOT_ISOLATION OFF
GO
ALTER DATABASE [Chatter] SET PARAMETERIZATION SIMPLE
GO
ALTER DATABASE [Chatter] SET READ_WRITE
GO
ALTER DATABASE [Chatter] SET RECOVERY FULL
GO
ALTER DATABASE [Chatter] SET MULTI_USER
GO
ALTER DATABASE [Chatter] SET PAGE_VERIFY CHECKSUM
GO
ALTER DATABASE [Chatter] SET DB_CHAINING OFF
/***************************************************/
USE [Chatter]
GO
/****** Object: Table [dbo].[Message] Script Date: 11/18/2005 13:56:39 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Message](
[int] [bigint] IDENTITY(1,1) NOT NULL,
[Message] [nvarchar](200) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
[Person_ID] [int] NOT NULL,
CONSTRAINT [PK_Message] PRIMARY KEY CLUSTERED
(
[int] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
USE [Chatter]
GO
/****** Object: Table [dbo].[Person] Script Date: 11/18/2005 13:56:56 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Person](
[id] [int] IDENTITY(1,1) NOT NULL,
[Name] [nvarchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
CONSTRAINT [PK_Person] PRIMARY KEY CLUSTERED
(
[id] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
USE [Chatter]
GO
/****** Object: StoredProcedure [dbo].[usp_GetMessages] Script Date: 11/18/2005 13:59:20 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROC [dbo].[usp_GetMessages]
AS
SELECT [Message], [Name]
FROM dbo.[Message]
JOIN dbo.Person ON id = [Message].Person_ID
USE [Chatter]
GO
/****** Object: StoredProcedure [dbo].[usp_InsertMessage] Script Date: 11/18/2005 13:59:35 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROC [dbo].[usp_InsertMessage]
@Message nvarchar(200),
@Person_ID int
AS
INSERT INTO [Message] ([Message], Person_ID)
VALUES (@Message, @Person_ID)
GO
/****************************************/
INSERT INTO [Chatter].[dbo].[Person]
([Name])
VALUES('Larry')
GO
INSERT INTO [Chatter].[dbo].[Person]
([Name])
VALUES('Moe')
GO
INSERT INTO [Chatter].[dbo].[Person]
([Name])
VALUES('Curly')
そして、これはあなたがあなたの基礎となる表の構造体で不正なデータタイプを持っているかもしれない、私のデータベース作成スクリプト(私は「ISS」とすべての「Chatterのを」置き換え)
USE [master]
GO
/****** Object: Database [ISS] Script Date: 11/18/2005 13:55:20 ******/
CREATE DATABASE [ISS] ON PRIMARY
(NAME = N'ISS', FILENAME = N'D:\iss.mdf' , SIZE = 5120KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB)
LOG ON
(NAME = N'ISS_log', FILENAME = N'D:\iss_log.ldf' , SIZE = 1536KB , MAXSIZE = 2048GB , FILEGROWTH = 10%)
COLLATE SQL_Latin1_General_CP1_CI_AS
GO
EXEC dbo.sp_dbcmptlevel @dbname=N'ISS', @new_cmptlevel=90
GO
IF (1 = FULLTEXTSERVICEPROPERTY('IsFullTextInstalled'))
begin
EXEC [ISS].[dbo].[sp_fulltext_database] @action = 'disable'
end
GO
ALTER DATABASE [ISS] SET ANSI_NULL_DEFAULT OFF
GO
ALTER DATABASE [ISS] SET ANSI_NULLS OFF
GO
ALTER DATABASE [ISS] SET ANSI_PADDING OFF
GO
ALTER DATABASE [ISS] SET ANSI_WARNINGS OFF
GO
ALTER DATABASE [ISS] SET ARITHABORT OFF
GO
ALTER DATABASE [ISS] SET AUTO_CLOSE OFF
GO
ALTER DATABASE [ISS] SET AUTO_CREATE_STATISTICS ON
GO
ALTER DATABASE [ISS] SET AUTO_SHRINK OFF
GO
ALTER DATABASE [ISS] SET AUTO_UPDATE_STATISTICS ON
GO
ALTER DATABASE [ISS] SET CURSOR_CLOSE_ON_COMMIT OFF
GO
ALTER DATABASE [ISS] SET CURSOR_DEFAULT GLOBAL
GO
ALTER DATABASE [ISS] SET CONCAT_NULL_YIELDS_NULL OFF
GO
ALTER DATABASE [ISS] SET NUMERIC_ROUNDABORT OFF
GO
ALTER DATABASE [ISS] SET QUOTED_IDENTIFIER OFF
GO
ALTER DATABASE [ISS] SET RECURSIVE_TRIGGERS OFF
GO
ALTER DATABASE [ISS] SET ENABLE_BROKER
GO
ALTER DATABASE [ISS] SET AUTO_UPDATE_STATISTICS_ASYNC OFF
GO
ALTER DATABASE [ISS] SET DATE_CORRELATION_OPTIMIZATION OFF
GO
ALTER DATABASE [ISS] SET TRUSTWORTHY OFF
GO
ALTER DATABASE [ISS] SET ALLOW_SNAPSHOT_ISOLATION OFF
GO
ALTER DATABASE [ISS] SET PARAMETERIZATION SIMPLE
GO
ALTER DATABASE [ISS] SET READ_WRITE
GO
ALTER DATABASE [ISS] SET RECOVERY FULL
GO
ALTER DATABASE [ISS] SET MULTI_USER
GO
ALTER DATABASE [ISS] SET PAGE_VERIFY CHECKSUM
GO
ALTER DATABASE [ISS] SET DB_CHAINING OFF
USE [ISS]
create table sectii (
cods int identity(0,1) primary key,
denumire varchar(30) not null,
)
create table useri (
codu int identity(0,1) primary key,
login varchar(20) not null,
password varchar(30) not null,
cods int foreign key references sectii(cods),
tip int not null,
)
create table medicamente (
codm int identity(0,1) primary key,
denumire varchar(50) not null
)
create table comenzi (
codc int identity(0,1) primary key,
cods int foreign key references sectii(cods),
data datetime not null,
codu int foreign key references useri(codu), --nu e nevoie
onorata bit
)
create table medicamente_comanda (
codc int foreign key references comenzi(codc) ON DELETE CASCADE,
codm int foreign key references medicamente(codm),
cantitate int
)
すごいものを解決! dbの所有者を変更してください!それも私のために働いた!ありがとう。 –
回答:http://stackoverflow.com/a/1764771/52277同様の質問は、SqlNotificationEventArgs引数の値を確認することを提案します。 TypeがChangeで、Sourceがデータ変更を通知したDataの場合のみ。 –