2009-08-31 25 views
19

Mon application MVC renvoie SqlExceptions lorsque j'essaie d'accéder à une table dans ma base de données.System.Data.SqlClient.SqlException: nom d'objet non valide 'dbo.Projects'

Détails d'exception: System.Data.SqlClient.SqlException: nom d'objet incorrect 'dbo.Projects'.

Mon app linq pour la couche de données.

Si j'utilise une vieille DLL cela fonctionne bien, (donc ne semble pas être un problème avec la DB) juste cette dernière application dll que j'ai téléchargé.

détails

[SqlException (0x80131904): nom d'objet non valide 'de dbo.Projects'.]
System.Data.SqlClient.SqlConnection.OnError (exception SqlException, breakConnection booléen) +1950890
System.Data.SqlClient.SqlInternalConnection.OnError (SqlException exception, Boolean breakConnection) 4846875
System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning (TdsParserStateObject stateObj) 194 System.Data.SqlClient.TdsParser.Run (runBehavior RunBehavior, SqlCommand cmdHandler, SqlDataReader DATASTREAM, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) 2392
System.Data.SqlClient.SqlDataReader.ConsumeMetaData() 33
System.Data.SqlClient.SqlDataReader.get_MetaData() 83
System.Data.SqlClient.SqlCommand.FinishExecuteReader (SqlDataReader ds, runBehavior runBehavior, String resetOptionsString) +297
System.Data.SqlClient.SqlCommand.RunExecuteReaderTds (CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Booléen async) 954
System.Data.SqlClient.SqlCommand.RunExecuteReader (CommandBehavior cmdBehavior, runBehavior RunBehavior, Boolean returnStream, String La méthode , résultat DbAsyncResult) 162
System.Data.SqlClient.SqlCommand.RunExecuteReader (CommandBehavior cmdBehavior, runBehavior runBehavior, Boolean returnStream, String La méthode ) 32
System.Data.SqlClient.SqlCommand.ExecuteReader (comportement CommandBehavior , méthode String) 141
System.Data.SqlClient.SqlCommand.ExecuteDbDataReader (CommandBehavior comportement ) +12 System.Data.Common.DbCommand.ExecuteReader ()
System.Data.Linq.SqlClient.SqlProvider.Execute 12 (requête d'expression, QueryInfo QueryInfo, usine IObjectReaderFactory, Object [] parentArgs, Object [] userArgs, ICompiledSubQuery [] Sous-requêtes, objet lastResult) +975
System.Data.Linq.SqlClient.SqlProvider.ExecuteAll (requête d'expression, QueryInfo [] queryInfos, usine IObjectReaderFactory, Object [] userArguments, ICompiledSubQuery []) Subqueries +113
System.Data.Linq.SqlClient.SqlProvider. System.Data.Linq.Provider.IProvider.Execute (Expression requête) +344
System.Data.Linq.DataQuery 1.System.Collections.Generic.IEnumerable<T>.GetEnumerator() +35 System.Linq.Buffer 1 .. ctor (IEnumerable 1 source) +247 System.Linq.<GetEnumerator>d__0.MoveNext() +108
System.Linq.Buffer
1..ctor (IEnumerable 1 source) +259
System.Linq.<GetEnumerator>d__0.MoveNext() +108
System.Collections.Generic.List
1 ..cteur (IEnumerable 1 collection) +7665172 System.Linq.Enumerable.ToList(IEnumerable une source) 61 Mezza_crm.Controllers.ProjectsController.GetProjectList (forme NameValueCollection) dans C: \ mezza_crm \ mezza_crm \ Controllers \ ProjectsController.cs: 164 Mezza_crm.Controllers.ProjectsController.List() dans C: \ mezza_crm \ mezza_crm \ Controllers \ ProjectsController.cs: 53
lambda_method (ExecutionScope, ControllerBase, objet []) 39
System.Web.Mvc.ActionMethodDispatcher.Execute (contrôleur ControllerBase , objet [] paramètres) 17
System.Web.Mvc.ReflectedActionDescriptor.Execute (ControllerContext controllerContext, IDictionary paramètres) +24
System.Web.Mvc. <> c__DisplayClassa.b__7() 52 System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter (filtre IActionFilter , ActionExecutingContext preContext, Func 1 continuation) +254
System.Web.Mvc.<>c__DisplayClassc.<InvokeActionMethodWithFilters>b__9() +19 System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters(ControllerContext controllerContext, IList
1 filtres, ActionDescriptor ActionDescriptor, paramètres IDictionary`2) 192
System.Web.Mvc .ControllerActionInvoker.InvokeAction (ControllerContext ControllerContext, String actionName) 399
System.Web.Mvc.Controller.ExecuteCore() 126
System.Web.Mvc.ControllerBase.Execute (RequestContext RequestContext) 27 System.Web .Mvc.ControllerBase.System.Web.Mvc.IController.Execute (RequestContext requestContext) +7
System.Web.Mvc.MvcHandler.ProcessRequest (HttpContextBase HttpContext) 151 System.Web.Mvc.MvcHandler.ProcessRequest (HttpContext HttpContext) +57
System.Web.Mvc.MvcHandler.System.Web.IHttpHandler.ProcessRequest (HttpContext HttpContext ) 7
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() 181 System.Web.HttpApplication.ExecuteStep (étape IExecutionStep, Boolean & completedSynchronously) +75

Répondre

3

Avez-vous accès au serveur SQL que vous interrogez? Pouvez-vous voir une table ou une vue appelée dbo.Projects là? Sinon, ce serait un bon endroit pour regarder. Linq to SQL crée un mappage d'objet entre la base de données et l'application.

Si votre nouvelle DLL que vous déployez ne correspond plus à la base de données, c'est le genre d'erreur que vous attendez. Avez-vous des schémas de base de données différents entre votre environnement de développement et l'environnement de déploiement?

+0

Yep dbo.Projects existe et n'a pas changé depuis la dernière version. J'ai apporté quelques modifications à une autre table et ajouté deux tables. Mais j'ai reflété les changements dans la base de données sur le serveur. Habituellement, je reçois quelque chose comme ceci si je fais un changement de dev et oublie de refléter le changement sur le serveur. System.Data.SqlClient.SqlException: nom de colonne incorrect 'Réel'. Mais une fois que je répare la table, cela fonctionne habituellement. Merci pour la réponse rapide. –

42

Vérifiez le paramètre Initial Catalog dans votre chaîne de connexion. Il se peut que votre code recherche dans la mauvaise base de données pour l'objet Projects. Par exemple, si vous avez une configuration de synchronisation de base de données telle que seul un sous-ensemble des tables de la base de données principale est transféré, vous pouvez rencontrer cette erreur si Linq to SQL attend que toutes les tables soient dans la base de données. par la chaîne de connexion.

+1

La chaîne de connexion est correcte. Web.Config n'a pas changé depuis la dernière version et la dernière version a bien fonctionné. –

+10

+1 c'était mon problème. d'oh! – fearofawhackplanet

+0

En suivant les instructions d'Azure et en copiant la chaîne de connexions du portail Azure, vous vous êtes trompé. Le correct, ou ce que j'ai modélisé après, était ici https://azure.microsoft.com/fr-fr/documentation/articles/sql-base de données-dotnet-comment-utiliser. Cela m'a aidé à me diriger dans la bonne direction, merci. – Mark

0

Si vous utilisez deux bases de données, vous pouvez en ajouter une autre DataClasses.dbml et y associer la deuxième base de données.
Cela fonctionne.

0

La cause de ce problème pourrait être un paramètre de propriété de la base de données (Sql2008R2 avec .NET4).

  • Le problème est reproductible à volonté lors de la modification de la valeur COLLATION d'une base de données.

Pour afficher COLLLATION, utilisez le Sql Server Mgmt Studio.

  • clic droit sur la base de données et sélectionnez Propriétés -> Général, regardez ensuite sous entretien pour la valeur COLLATION

Pour changer COLLATIONNEMENT, (encore) utiliser le Sql Server Mgmt Studio.

  • clic droit sur la base de données et sélectionnez Propriétés -> Options, A partir de là, vous pouvez modifier la valeur COLLATION
+1

Qu'est-ce que l'on suppose pour le changer? – Ciwan

+0

quelle est la bonne colation – toha

0

Supprimer le tableau _MigrationHistory dans (yourdatabseName> Tables> Tables système) si vous avez déjà votre base de données, puis exécutez la commande ci-dessous dans la console du gestionnaire de packages

PM> update-database 
0

J'ai eu la même erreur. La cause était que j'avais créé une table avec un mauvais schéma (il devrait être [dbo]). Je l'ai fait les étapes suivantes:

  1. Je lâchai toutes les tables qui ne disposent pas d'un préfixe « dbo. »

  2. J'ai créé et exécuter cette requête:

CREATE TABLE dbo.Cars(IDCar int PRIMARY KEY NOT NULL,Name varchar(25) NOT NULL,  
CarDescription text NULL) 
GO 
1

Si vous êtes dans cette phase de développement où vous avez une méthode dans votre classe de contexte qui crée testdata pour vous, ne l'appelez pas dans votre constructeur, il va essayer de créer ces enregistrements de test alors que vous n'avez pas encore de tables. Juste partager mon erreur ...

0

Le problème que j'avais était parce que j'avais fait une base de données dans mon LocalDb.
Si tel est le cas, alors vous devez écrire est comme indiqué ci-dessous:

"SELECT * FROM <DatabaseName>.[dbo].[Projects]" 

Remplacer le nom de votre base de données.
Vous pouvez également supprimer le "[]"

Questions connexes