SQL Server 2005/2008,db = user = schema = owner ='John',ASP.net 2.0.50727,vb,IIS7
我正在将网站从一台服务器移动到另一台服务器。这段代码在带有SQL Server 2005的旧服务器上运行良好。
Dim sqlCmdVehicle As SqlCommand = New System.Data.SqlClient.SqlCommand("SP_Name", sqlConn)
Dim dtVehicle As New DataTable
With sqlCmdVehicle
.Parameters.AddWithValue("FullStockNo", "N102010")
.CommandType = CommandType.StoredProcedure
End With
sqlConn.Open()
sqlAdapter.SelectCommand = sqlCmdVehicle
sqlAdapter.Fill(dtVehicle)
数据库已备份,并已成功在新服务器上还原。当我尝试使用新的SQL Server 2008运行时,出现错误:
找不到存储过程'SP_Name'。指向最后一行。
我可以用'MS SQL Management Studio'看到的过程不是dbo.SP_Name,而是John.SP_Name
当我改变
System.Data.SqlClient.SqlCommand("SP_Name", sqlConn)
进入
System.Data.SqlClient.SqlCommand("John.SP_Name", sqlConn)
都工作良好,但是与所有其他过程相同,并且在代码中有很多类似的地方:(
我得到了http://msdn.microsoft.com/en-us/library/ms189915.aspx,但呼叫者的默认架构正确。同样,在旧盒子上一切正常。
我应该在SQL中解决哪些问题,以允许运行SP时没有明确提到的用户/模式名称?
谢谢。
====================================== =>
不幸的是,我没有找到好的解决方案。我采用的方式是在整个项目中将SP_Name搜索并替换为John.SP_Name。感谢所有参与者。
SQL Server 2005/2008,db = user = schema = owner ='John',ASP.net 2.0.50727,vb,IIS7我正在将网站从一台服务器移到另一台服务器。这段代码在带有SQL Server 2005的旧服务器上运行良好。...
我不确定100%,但是您可能使用sql用户名/ pw连接到数据库,然后使用用户名“ john”。
如果您运行SQL Profiler并查看跟踪数据,您将确切地知道发生了什么。您将看到对数据库的确切调用以及发生的情况。
在SQL Server中>数据库>您的数据库名称>安全性>模式
我们今天发现,即使您在数据库中为用户指定了默认架构,如果您将用户权限更改为SQL Server上的sysadmin,则如果您尝试运行存储过程,则默认架构将被忽略。如果不指定模式名称,它将认为该存储过程在dbo模式下!当您从登录用户中删除sysadmin权限时,如果您在EXEC命令中未指定任何模式名称,它将使用为该数据库设置的默认模式运行存储过程。
SQL Server 2008的默认架构为“ dbo”。这就是为什么它试图打dbo.SP_Name
不幸的是,我没有找到好的解决方案。我采用的方式是在整个项目中将SP_Name搜索并替换为John.SP_Name。感谢所有参与者。
@@ putnik已经选择了答案,但是对此有解决方案。