我一直在与这个错误作斗争两天,我找不到任何已经检查过我的服务正在运行的解决方案,已启用命名管道和TCP / IP。我可以使用Windows和SQL Server身份验证登录SQL Server。当我发送命令文本以从表中选择时,会发生这种情况,连接状态是打开的但是当我这样做时:
var dbCommand = CreateDbCommand(connection, commandText, null, parameters);
return dbCommand.ExecuteReader();
private static IDbCommand CreateDbCommand(IDbConnection connection, string commandText, CommandType? commandType, IEnumerable<Parameter> parameters)
{
var command = connection.CreateCommand();
command.CommandText = commandText;
command.CommandType = commandType ?? CommandType.Text;
foreach (var parameter in parameters)
{
var sqlParameter = command.CreateParameter();
sqlParameter.ParameterName = parameter.Key;
sqlParameter.Value = parameter.Value ?? DBNull.Value;
command.Parameters.Add(sqlParameter);
}
return command;
}
我收到错误
return dbCommand.ExecuteReader();
我已经用尽了耐心,欢迎任何帮助。
我使用的是SQL Server 2016,我的网站在本地IIS下运行。
由于
PS:这曾经在SQL Server 2012中运行,但自升级以来失败。
此致
答案 0 :(得分:1)
IIS:
如果您在IIS下运行,那么您的Web应用程序或虚拟目录在AppPool下运行,并且该AppPool具有与之关联的IIdenity。所以只是因为〜你(mycompany \ jackm)可以访问数据库,这并不意味着运行AppPool的帐户可以。找出谁正在运行AppPool并向该用户授予db的登录和权限。
或(快速测试),将AppPool的身份更改为您(mycompany \ jackm),然后尝试。
如果您使用的是本地用户帐户,请确保为该用户提供登录和访问数据库的权限。
Use Master
GO
CREATE LOGIN [myMachineName\myLocalUser] FROM WINDOWS;
GO
use MyDatabase
EXEC sp_addrolemember 'db_datareader', 'myMachineName\myLocalUser'
GO