为什么我会收到 SqlDependency 的子查询错误
本文关键字:查询 错误 SqlDependency 为什么 | 更新日期: 2023-09-27 18:36:00
我的数据库管理员昨天不得不进行一些权限/所有权更改。以前,我的 SqlDependency 代码运行良好。
但是现在有一个我认为是凭据问题(我相信这一点,因为我在长时间的网络搜索后看到了一个小纸条)。
我使用此连接字符串成功连接到 MS SQL:
connectionString = @"user id=billybob;" +
@"password=bigsecret;" +
"server=11.2.133.8;" +
"Trusted_Connection=no;" +
"database=MYDB; " +
"MultipleActiveResultSets=true;" +
"connection timeout=30";
然后我尝试使用以下命令启动 SqlDependency :
SqlDependency.Start(connectionString, null);
但是我收到此错误:
System.Data.SqlClient.SqlException was unhandle HResult=-2146232060 消息 = 子查询返回了超过 1 个值。这是不允许的 当子查询跟在 =、!=、<、<= 、>、>= 之后或子查询 用作表达式。该语句已终止。
可能是什么问题?
基兰尼的更完整跟踪:
子查询返回了 1 个以上的值。在以下情况下不允许这样做 子查询跟随 =、!=、<、<= 、>、>= 或当子查询用作 一个表达式。该语句已终止。 在 System.Data.SqlClient.SqlConnection.OnError(SqlException exception, 布尔中断连接,操作
1 wrapCloseInAction) at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady) at System.Data.SqlClient.SqlCommand.RunExecuteNonQueryTds(String methodName, Boolean async, Int32 timeout, Boolean asyncWrite) at System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(TaskCompletionSource
1 完成, 字符串方法名称, 布尔发送到管道, Int32 超时, 布尔异步写入) at System.Data.SqlClient.SqlCommand.ExecuteNonQuery() at SqlDependencyProcessDispatcher.SqlConnectionContainer.CreateQueueAndService(Boolean 重新启动)在 SqlDependencyProcessDispatcher.SqlConnectionContainer..ctor(SqlConnectionContainerHashHelper hashHelper, String appDomainKey, Boolean useDefaults) at SqlDependencyProcessDispatcher.Start(String connectionString, String& server, DbConnectionPoolIdentity& identity, String& user, String& database, String& queueService, String appDomainKey, SqlDependencyPerAppDomainDispatcher dispatcher, Boolean& errorHappen, Boolean& appDomainStart, Boolean useDefaults) at SqlDependencyProcessDispatcher.StartWithDefault(String connectionString, String& server, DbConnectionPoolIdentity& identity, String& user, String& database, String& service, String appDomainKey, SqlDependencyPerAppDomainDispatcher dispatcher, Boolean& errorHappen, Boolean&appDomainStart) at System.Data.SqlClient.SqlDependency.Start(String connectionString, 字符串队列,布尔值使用默认值)
这是调用它的代码:
请在创建查询之前发生注释错误!
public void InitialiseDependency(Action onDependencyMethod)
{
this.onDependencyMethod = onDependencyMethod;
SqlDependency.Start(connectionString, null); //<<<< ERROR ON THIS LINE
using (SqlCommand command = new SqlCommand(
"SELECT [Symbol] FROM [dbo].[tbls] WHERE [Status] = 'NEW'",
conn))
{
SqlDependency dependency = new SqlDependency(command);
dependency.OnChange += new OnChangeEventHandler(OnDependencyChange);
using (SqlDataReader reader = command.ExecuteReader())
{
// Process the DataReader.
}
}
}
最终我们删除并重新创建了用户"billybob"。一旦我们这样做,错误就消失了......