【问题标题】:Error accessing stored procedure访问存储过程时出错
【发布时间】:2012-11-16 11:06:43
【问题描述】:

我们有一个 .NET3.5 Windows 窗体应用程序,它在同一台服务器上调用一个 ASP.NET SOAP Web 服务。然后,此 Web 服务将数据保存到 SQL Server Express 2005 数据库中,同样位于同一服务器上。

该应用程序已在内部以及我们的许多客户中部署,并且已按预期运行了 18 个月以上。然而本周,在我们主要客户的站点上,该应用程序已开始在其部署的 10 台服务器中的 4 台上生成错误消息。所有 Web 服务方法都使用相同的连接字符串,但只有一种 Web 方法受到影响。

连接字符串的格式如下:

Data Source=MYSERVER\SQLEXPRESS;Initial Catalog=MyDatabase;
Persist Security Info=True;User ID=MyUser;Password=MyPassword

当应用程序调用一个特定的 Web 服务方法时,它会产生错误:

找不到用户“MyDatabase”,因为它不存在或者您 没有权限。

没有对应用程序进行任何更改来导致此问题,但是客户的 IT 人员可能对这些服务器进行了更改。 MyUser 已被授予存储过程的权限,并且能够连接到所有其他 Web 服务接口。

让我困惑的主要是错误消息说不存在的用户是MyDatabase,这是连接字符串中的Initial Catalog 名称。

我已经在现场与客户一起验证了应用程序仍然设置正确,并且所有其他 Web 服务接口都正确连接到数据库。

任何可能的原因或我可以检查的其他事情的任何建议都将不胜感激。

【问题讨论】:

    标签: sql-server sql-server-2005-express database-permissions


    【解决方案1】:

    我强烈建议不要删除 dbo。那是模式名称。简单地删除它意味着数据库使用默认模式,这可能是 dbo 反正。所以它什么也做不了。但是,如果在调用过程时不使用模式名称,您可能会遇到命名冲突。例如,如果您在数据库中的两个不同架构中有一个同名的过程,并且您尝试在没有架构名称的情况下调用它,则数据库将不知道该调用哪个,从而导致异常。

    【讨论】:

    • 感谢您查看我的问题。您是否建议我们需要添加“dbo”。在连接字符串的某个地方?此 SQL Server 实例上没有安装其他数据库,因此不应该有任何命名冲突,当然将数据库名称放在连接字符串中应该确保访问正确的架构并调用正确的过程。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-18
    • 1970-01-01
    • 2019-02-28
    • 2016-11-28
    • 2013-12-18
    • 1970-01-01
    相关资源
    最近更新 更多