SQL Server 2005/2008, db = user = schéma = propriétaire = 'John', ASP.net 2.0.50727, vb, IIS7SQL Server 'Impossible de trouver la procédure stockée' sans nom de schéma
Je suis déplacer le site web d'un serveur à l'autre. Ce morceau de code fonctionne bien sur l'ancien serveur avec 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)
DB est sauvegardé et restauré avec succès sur le nouveau serveur. Lorsque je tente d'exécuter avec le nouveau SQL Server 2008 Je suis une erreur:
Could not find stored procedure 'SP_Name'. pointing at last line.
je peux voir les procédures avec « studio de gestion MS SQL » pas dbo.SP_Name mais comme John.SP_Name
Quand je change
System.Data.SqlClient.SqlCommand("SP_Name", sqlConn)
dans
System.Data.SqlClient.SqlCommand("John.SP_Name", sqlConn)
tout fonctionne bien, mais il est le même avec toutes les autres procédures et beaucoup de tels endroits aimables dans le code :(
J'ai obtenu http://msdn.microsoft.com/en-us/library/ms189915.aspx, mais le schéma par défaut de l'appelant est correct. Encore une fois, tout fonctionne bien sur une vieille boîte.
Que dois-je corriger dans SQL pour autoriser l'exécution de SP sans nom d'utilisateur/schéma explicitement mentionné?
Merci.
=======================================
Malheureusement, je n'a pas trouvé de bonne solution. La façon dont j'ai pris était recherche-et-remplacer SP_Name à John.SP_Name pour le projet entier. Merci à tous les participants.
A partir du fichier d'aide que vous avez affiché 'SQL Server 2008 utilise le classement de la base de données appelante lors de la mise en correspondance des noms de procédure système. Par conséquent, vous devez toujours utiliser le cas exact des noms de procédure système dans votre application. Par exemple, ce code échouera s'il est exécuté dans le contexte d'une base de données avec un classement sensible à la casse: ' – JonH
" Par exemple, ce code échouera s'il est exécuté dans le contexte d'une base de données avec un classement sensible à la casse: " - et le commentaire est terminé ou je ne peux pas voir la fin. Je viens de vérifier ** login ** (pas d'utilisateur) John et trouvé qu'il n'y a pas de mappage vers John DB. Je peux cocher la case, corriger le nom d'utilisateur et le schéma, appuyer sur 'ok', ouvrir à nouveau cette connexion, et voir cette case cochée. Aucun message d'erreur, aucune erreur dans le journal. S'il vous plaît donnez votre avis. – Putnik
@JonH "Par exemple, ce code échouera s'il est exécuté dans le contexte d'une base de données qui a un classement sensible à la casse:" - et le commentaire est terminé ou je ne peux pas voir la fin. – Putnik