2011-01-03 4 views
2

J'ai essayé de créer une procédure stockée qui prend des valeurs de mon programme et l'insère dans des colonnes spécifiques dans une table. Je continue d'obtenir une erreur de syntaxe incorrecte dans la procédure stockée mais je n'arrive pas à comprendre pourquoi? Le code du programme:procédure stockée serveur SQL pour mettre à jour les enregistrements

  commandObj.CommandText = "sp_insert_profileDetails" 

      commandObj.Parameters.Clear() 

      Dim m_param As SqlParameter 

      m_param = commandObj.Parameters.Add("@authorId", SqlDbType.NVarChar, 100) 
      m_param.Direction = ParameterDirection.Input 
      m_param.Value = foundProfiles.Item(i) 


      m_param = commandObj.Parameters.Add("@age", SqlDbType.NVarChar, 50) 
      m_param.Direction = ParameterDirection.Input 
      m_param.Value = faceProfileAge.Item(i) 

      m_param = commandObj.Parameters.Add("@gender", SqlDbType.NVarChar, 50) 
      m_param.Direction = ParameterDirection.Input 
      m_param.Value = faceProfileSex.Item(i) 

      m_param = commandObj.Parameters.Add("@locale", SqlDbType.NVarChar, 50) 
      m_param.Direction = ParameterDirection.Input 
      m_param.Value = faceProfileLocation.Item(i) 

      m_param = commandObj.Parameters.Add("@pic", SqlDbType.NVarChar, 100) 
      m_param.Direction = ParameterDirection.Input 
      m_param.Value = faceProfilePic.Item(i) 

      Dim recordsAffected As Integer = commandObj.ExecuteNonQuery 
      Return recordsAffected 



ALTER procedure [dbo].[sp_insert_profileDetails] 
@authorId nvarchar(100), 
@age nvarchar(50), 
@gender nvarchar(50), 
@locale nvarchar(50), 
@pic nvarchar(100) 

AS 
    Begin 
    set nocount on 
    update [dbo].ProfileFeed 
    set [age] = @age, 
     [sex] = @gender, 
     [locale] = @locale, 
     [pic] = @pic 
    where 
     [authorId] = @authorId 
    end 

Toute aide appréciée?

+2

Quelle est l'erreur? Pouvez-vous copier le coller ici? –

+5

Sans rapport avec votre problème, mais le préfixage de vos sprocs avec sp_ est déconseillé par MS: http://msdn.microsoft.com/en-us/library/ms190669.aspx –

+1

Un point délicat, sauf si vous savez exactement ce que vous faites et pourquoi, vous ne voulez vraiment pas préfixer vos procédures avec "sp_". SQL effectue un traitement supplémentaire pour toutes les procédures sp_, ce qui pourrait vous faire perdre du temps. (Une explication détaillée peut être trouvée dans BOL.) –

Répondre

5

Il me manque quelques lignes de code pour être sûr, mais ....

Avez-vous préciser que le commandObj.CommandType est System.Data.CommandType.StoredProcedure?

Si vous oubliez de définir cela, .NET traitera comme System.Data.CommandType.Text par défaut, et la base de données renvoie une erreur de syntaxe incorrecte ..

+0

J'ai oublié de le faire, laissez-moi l'essayer à nouveau ... merci ... je reviendrai – vbNewbie

+0

Mon plaisir. Content d'être utile. – David

0

Je ne vois pas où vous êtes en train d'insérer des enregistrements dans la base de données.

Les états de procédure stockée:

update [dbo].ProfileFeed 
    set [age] = @age, 
     [sex] = @gender, 
     [locale] = @locale, 
     [pic] = @pic 
    where 
     [authorId] = @authorId 
    end 

Pourtant, le SP est nommé [dbo].[sp_insert_profileDetails]

Vouliez-vous dire écrire "insert into [dbo].ProfileFeed" au lieu de "update"?

+0

Je n'essaie pas d'ajouter de nouveaux enregistrements, j'essaie de mettre à jour les colonnes d'enregistrement existantes. Donc, où l'identificateur d'auteur correspond à l'endroit où ces colonnes doivent être mises à jour. – vbNewbie

Questions connexes