5

J'appelle le code ci-dessous.C#, sp_executesql et Syntaxe incorrecte

Sur la ligne (IDataReader dr = cmd.ExecuteReader()) Barfs sql avec une syntaxe incorrecte près de 'CompanyUpdate'.

using (SqlCommand cmd = new SqlCommand("CompanyUpdate")) 
     { 
      cmd.Parameters.Add("@CompanyID",SqlDbType.Int); 
      cmd.Parameters.Add("@Description",SqlDbType.VarChar,50); 
      cmd.Parameters["@CompanyID"].Value = companyid; 
      cmd.Parameters["@Description"].Value = description; 

      SqlConnection cn = new SqlConnection("Data Source=[datasource];Initial Catalog=dotNext;User ID=[user];Password=[password];Pooling=True;Application Name=dotNext"); 
      cn.Open(); 
      cmd.Connection = cn; 
      using (IDataReader dr = cmd.ExecuteReader()) 
      { 
       if (dr.Read()) 
       { 
        this.CompanyID = dr.GetInt32(0); 
       } 
      } 
     } 

J'ai regardé SQLProfiler et a remarqué ce qui suit:

exec sp_executesql N'CompanyUpdate',N'@CompanyID int,@Description varchar(50)',@CompanyID=56,@Description='APC' 

Son emballage mon esprit de commande un sp_executesql. Toutes mes autres commandes SQL sont simplement exécutées sans problèmes.

Donc, ma question est double: 1. Pourquoi utilise-t-il sp_executesql? 2. Qu'est-ce que je fais de mal?

Détails: sql2005, C#, VS2005

Répondre

11

Je remarque que vous avez défini pas le CommandType StoredProcedure ... Je ne sais pas si c'est la cause de votre problème ou non:

cmd.CommandType = CommandType.StoredProcedure; 

Je l'ai fait tant de fois moi-même je ne peux pas compter.

Astuce pour déclencher votre mémoire lorsque cela jette des exceptions prochaine:

Have Profiler requête SQL ouverte pendant que vous utilisez votre application. Lorsque chaque commande s'exécute, elle affiche le code SQL généré et s'exécute du côté serveur. Si le code SQL généré commence par sp_executesql suivi de votre requête, il est exécuté en tant que requête standard, c'est-à-dire cmd.CommandType = CommandType.Text, s'il commence par exec, il est probable qu'il s'exécute en tant que proc stocké. Assurez-vous que vous obtenez le code SQL correct pour le type de requête que vous essayez d'exécuter.

+1

C'est tellement énervant !! Je vous remercie! –

+0

lol - parfois il suffit d'un autre jeu d'yeux ... – BenAlabaster

+0

Argh, merci. Pourquoi diable ne serait-ce pas une erreur si vous ajoutez des paramètres à un SqlCommand et ne le définissez pas à StoredProcedure ... – jcollum

Questions connexes