2

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

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

连接字符串的格式为:

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

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

Cannot find the user 'MyDatabase', because it does not exist or you do not have permission.

已有的应用程序没有变化造成这种情况,但客户的IT人员可能已经对这些服务器进行了更改。 MyUser已被授予存储过程的权限,并且能够连接到所有其他Web服务接口。

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

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

任何可能的原因或我可以检查的其他事情的任何建议将受到感谢。

回答

1

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

+1

谢谢你看我的问题。你是否暗示我们需要添加“dbo”?连接字符串中的某处?此SQL Server实例上没有安装其他数据库,因此不应该有任何命名冲突,并且确实将数据库名称放入连接字符串中应确保访问正确的模式并调用正确的过程。 –