2015-10-06 31 views
2

幸运的是,这是在UAT而不是生产。从一个存储过程调用的Web应用程序SQL登录失败

的UAT服务器虚拟机Azure中运行SQL Server 2012和Windows Server 2012的 在应用我得到一个错误

Login failed for user 'User'. at System.Data.SqlClient.SqlInternalConnection

Microsoft.ApplicationBlocks.Data.SqlHelperParameterCache.GetSpParameterSetInternal(SqlConnection connection, String spName, Boolean includeReturnValueParameter)
at Microsoft.ApplicationBlocks.Data.SqlHelperParameterCache.GetSpParameterSet(String connectionString, String spName, Boolean includeReturnValueParameter)
at Microsoft.ApplicationBlocks.Data.SqlHelperParameterCache.GetSpParameterSet(String connectionString, String spName)

登录一个页面是一个SQL Server登录,而不是一个域登录

在同一个网页,但是也有一些相同的数据库,此存储过程的开始叫

我已经下降之前进行的与同一连接字符串并重新创建存储的其他3个存储过程调用程序

我已经删除并重新创建数据库登录

帐户是授予让它执行该存储过程属于

架构权利。如果我登录到SSMS作为这个数据库角色的成员用户,我可以:

  • 展开存储过程列表数据库
  • 展开受影响的存储过程的参数列表
  • 运行受影响的存储过程,并得到预期的结果

我有一个替代的Web服务器设置,它使用域名登录的连接字符串中的SQL Server上,是没有问题的运行。我们正在尝试弃用网站的SQL Server版本。

任何人都可以提出什么可能导致这一点,以及如何解决它?

+1

奇怪!你是否尝试更改过程名称?正如你所说的“在同一个网页上,有3个其他存储过程调用是在这个存储过程之前使用相同的连接字符串对同一个数据库进行的,因此开始调用” – Hybridzz

+2

SQL Server错误日志中的任何相关消息? –

+0

@Hybridzz - 这将需要我对UAT进行更新部署,因此它将不得不等待一两天。有趣的,如果它的工作 –

回答

1

感谢您的.NET SqlClient安全行为。通过数据应用块 工作呼叫

return SqlHelper.ExecuteReader(ConnectionString, sql_OutboundQueue_TypeAndStatusCount, DBUtility.GetNull(since)); 

这倒链通过数据应用块调用SqlHelperParameterCache.GetSpParameterSet

失败呼叫

SqlConnection con = new SqlConnection(QueueDataProvider.ConnectionString); 
SqlCommand cmd = new SqlCommand(QueueDataProvider.OutboundQueue.sql_OutboundQueue_Search, con); 
con.Open(); 
cmd.CommandType = CommandType.StoredProcedure; 
cmd.Parameters.AddRange(SqlHelperParameterCache.GetSpParameterSet(con.ConnectionString, cmd.CommandText)); 

原因: con.ConnectionString已被清除,如果密码您正在使用SQL登录,但只有在您拨打电话后打开。打开

感谢:ConnectionString loses password after connection.Open

相关问题