【问题标题】:System.Data.SqlClient.SqlException: Could not find stored procedure - Issue while accessing stored procedure in different schemaSystem.Data.SqlClient.SqlException:找不到存储过程 - 访问不同架构中的存储过程时出现问题
【发布时间】:2019-02-28 21:42:48
【问题描述】:

在启动一项 Windows 服务时,我可以看到以下错误。我在同一服务器中托管的一个 Web 应用程序中也看到错误。两者都连接到同一个数据库。过去两年它工作没有任何问题,并且事件查看器中突然出现这些错误

 System.Data.SqlClient.SqlException: Could not find stored procedure 
 'psp_SDT_SRV_Insert'.

仅在“dgo”架构内连接存储过程时发生问题。但我可以访问“dbo”架构内的所有过程。

当我尝试创建 Windows 窗体应用程序并尝试访问同一个 SP 时,我没有遇到任何问题。所有这些应用程序都使用相同的连接字符串

连接字符串如下

  <add name="connectionstring" connectionString="server=PGSI.PA.YA.NET\INST1;database=CustomerDB;integrated security = true" providerName="System.Data.SqlClient"/>

谁能建议如何解决这个问题?

【问题讨论】:

  • Schema 限定 sql 语句中的对象名称。示例:dgo.psp_SDT_SRV_Insert
  • 。过去两年它一直在正常工作,但在事件查看器中突然出现这些错误。我最近没有进行任何代码更改
  • 它在过去两年里一直运行没有任何问题,突然在事件查看器中出现这些错误。我真的很惊讶
  • 您还可以更改用户/登录名的拥有架构或 Sql Server 中数据库中的默认架构(如果您不想更改代码)。
  • 如果用户的默认架构发生更改,可能会发生这种情况。因为这是使用集成安全性,所以我们无法从此处提供的信息中看到实际是哪个用户。实际上是否有 dgo 架构,它是否有目的?因为这听起来像是dbo 的一个简单错字。试试select * from customerDB.sys.database_principals where default_schema_name='dgo'

标签: sql asp.net .net sql-server connection-string


【解决方案1】:

问题是因为默认架构设置。因此,为了拥有默认架构,用户需要具有数据库角色,如 db_owner、db_datawriter 等,而不是服务器角色 sysadmin。 我已经在以下线程的帮助下解决了

https://serverfault.com/questions/203551/sql-server-2008-default-schema-not-being-respected

【讨论】:

    猜你喜欢
    • 2020-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-11
    • 1970-01-01
    相关资源
    最近更新 更多