Я разрабатываю приложение с функцией SQL Dependency. Когда я выполняю приложение, подписка не была зарегистрирована. и sys.dm_qn_subscriptions
не имеет входа. я использовал SQL Profiler для отслеживания проблемы и я заметил, что подписка не была зарегистрирована как я не получил сообщение 1 – Subscription registered
, но вместо этого получил 3 – subscription fired
со следующим сообщением Извещение:Неподписана подписка на SQLDependency и сообщение уведомления о запросе с параметрами источника и опциями Info
<qnev:QNEvent xmlns:qnev="http://schemas.microsoft.com/SQL/Notifications/QueryNotificationProfiler"><qnev:EventText>subscription fired</qnev:EventText><qnev:SubscriptionID>0</qnev:SubscriptionID><qnev:NotificationMsg><qn:QueryNotification xmlns:qn="http://schemas.microsoft.com/SQL/Notifications/QueryNotification" id="0" type="subscribe" source="statement" info="set options" database_id="0" sid="0x01"><qn:Message>2c231f39-60c7-4a73-b575-617a791930f3;d06f0979-8f9b-490e-90ca-6042ab38d68c</qn:Message></qn:QueryNotification></qnev:NotificationMsg><qnev:BrokerDlg>2FAE7196-0E30-E411-8F82-0050569E473E</qnev:BrokerDlg></qnev:QNEvent>
и когда я проверил это следующая информация:
Type: Subscription, Source: Statement and Info: set options
и когда я проверил MSDN смысла он говорит The connection options were not set appropriately when the command was submitted.
это строка соединения я использую
<add name="DefaultConnection" connectionString="Data Source=crmserver;Initial Catalog=crmdatabase;Persist Security Info=True;User ID=sa;Password=mypassword" />
и Ниже приведен код, я использую:
public List<Customer> GetLeadUpdates(SqlDependency dependency)
{
using (var connection = new SqlConnection(ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString))
{
var query = "SELECT id, name, salary FROM [dbo].[CustomerTest]";
connection.Open();
using (var command = new SqlCommand(query, connection))
{
command.Notification = null;
dependency.AddCommandDependency(command);
if (connection.State == ConnectionState.Closed)
connection.Open();
var reader = command.ExecuteReader();
var list = new List<Customer>();
while (reader.Read())
{
var customer = new Customer();
customer.Id = (int) reader["id"];
customer.Name = reader["name"].ToString();
customer.Salary = (int) reader["salary"];
list.Add(customer);
}
return list.OrderBy(p=>p.Id).ToList();
}
}
}
пожалуйста, дайте мне знать, что я должен сделать, чтобы успешно зарегистрировать подписку. Я включил сервис-брокер и использовал учетные данные «sa» в строке подключения для подключения к db, поэтому я полагаю, что мне не нужно какое-либо конкретное разрешение на подписку на уведомление, поскольку sa является dbo базы данных.
я выполнил DBCC Useroptions на SSMS и ResultSet показывает, что все, что вы упомянули уже включены: 'TextSize \t 2147483647', 'язык \t us_english', 'DateFormat \t MDY', 'DATEFIRST \t 7', ' lock_timeout \t -1' , 'quoted_identifier \t SET', 'ARITHABORT \t SET', ' ANSI_NULL_DFLT_ON \t SET', ' ANSI_WARNINGS \t SET', ' ANSI_PADDING \t SET', 'ANSI_NULLS \t SET', 'CONCAT_NULL_YIELDS_NULL \t SET', 'уровень изоляции \t чтения совершено' –
Можете ли вы попробовать Profiler вместо SSMS? –
Какие события я должен отслеживать в профилировщике, чтобы получить эти результаты? –