2011-11-03 2 views
0

J'essaie de lancer ce que je pensais être une requête d'insertion paramétrée plutôt simple, mais je rencontre toutes sortes de problèmes. SQL EXPRESS 08R2, VB.netLa requête d'insertion paramétrée ne fonctionne pas

Voici le code VB qui construit les paramètres ... MISES À JOUR Les noms de variables:

itemDataSource1.ConnectionString = ConfigurationManager.ConnectionStrings("MyConnectionString").ToString() 
itemDataSource1.InsertCommandType = SqlDataSourceCommandType.StoredProcedure 
itemDataSource1.InsertParameters.Add("@short_Text", short_Text) 
itemDataSource1.InsertParameters.Add("@foreignTable", foreignTable) 
itemDataSource1.InsertCommand = "usp_insertLangShortText"   ' Call stored procedure 

'*********************************************************************** 
' Begin the insertion. Check for errors during insert process. 

Dim rowsAffected As Integer = 0 
rowsAffected = itemDataSource1.Insert() 

Et voici le SP que je suis en train de réaliser l'insert avec.

@short_Text varchar(250), 
@foreignTable varchar(250) 

AS 
/* SET NOCOUNT ON */ 
DECLARE @sql varchar(max); 

    BEGIN 
SET @sql = 'INSERT INTO ' + @foreignTable + ' (short_Text) VALUES (''' + @short_Text + ''')'; 
    END 

print (@sql) 
EXECUTE(@sql); 
SET @sql = '' 

RETURN 

Toutes les suggestions sur la façon de coder ceci plus intelligemment sont les bienvenues.

Voici l'erreur .... System.Data.SqlClient.SqlException: Procédure ou fonction usp_insertLangShortText a trop d'arguments spécifiés. à System.Data.SqlClient.SqlConnection.OnError (Exception SqlException, Boolean breakConnection) à System.Data.SqlClient.SqlInternalConnection.OnError (Exception SqlException, Boolean breakConnection) à System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning (TdsParserStateObject stateObj) à System .Data.SqlClient.TdsParser.Run (runBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader DATASTREAM, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) à System.Data.SqlClient.SqlCommand.FinishExecuteReader (SqlDataReader ds, runBehavior runBehavior, String resetOptionsString) à System.Data.SqlClient .SqlCommand.RunExecuteReaderTds (CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean asynchrone) à System.Data.SqlClient.SqlCommand.RunExecuteReader (CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, méthode String, résultat DbAsyncResult) à System.Data.SqlClient. SqlCommand.InternalExecuteNonQuery (résultat DbAsyncResult, Str ing methodName, Boolean sendToPipe) à System.Data.SqlClient.SqlCommand.ExecuteNonQuery() à System.Web.UI.WebControls.SqlDataSourceView.ExecuteDbCommand (commande DbCommand, opération DataSourceOperation) à System.Web.UI.WebControls.SqlDataSourceView.ExecuteInsert (Valeurs IDictionary) à System.Web.UI.WebControls.SqlDataSource.Insert() à par_importExcelDataPTS.GetRootID (String short_Text, Int32 string_id, String nom_bd, String nom_langue) dans C: \ Users

Répondre

0

Je crois que vous devrez peut-être ajouter un @ devant les noms de paramètres lorsque vous les ajoutez:

itemDataSource1.InsertParameters.Add("@short_Text", short_Text) 
itemDataSource1.InsertParameters.Add("@foreignTable", foreignTable) 

En outre, si votre short_text contient une seule citations, le SQL échouera à évaluer. Pour résoudre ce problème, remplacez toutes les guillemets simples dans short_Text par deux guillemets simples.

Si cela ne résout pas le problème, pouvez-vous publier les messages d'erreur exacts que vous recevez?

+0

Les apostrophes ont toutes été échappées, les chaînes de texte n'ont pas d'apostrophes qui ne sont pas mises à jour. Je vais essayer de changer les signes @. – htm11h

+0

pas de chance, mise à jour orig post. – htm11h

+0

Ah, l'exception aide: pour une raison quelconque votre paramètre ne le fait pas.J'ai deux idées sur pourquoi cela pourrait être: 1) Les paramètres sont effacés lorsque vous définissez InsertCommand; essayez de le déplacer au-dessus de la zone où les paramètres sont définis; 2) short_text est Nothing; étape dans le code dans le débogage et assurez-vous que cette valeur est définie. –

2

Y at-il une raison spécifique le paramètre Les noms sont différents comme cela peut être la cause de votre problème:

C# - itemDataSource1.InsertParameters.Add("short_Text", short_Text)

SQL - @shrtText varchar(250)

faut-il pas: itemDataSource1.InsertParameters.Add("shrtText", short_Text)

+0

Je vais mettre à jour et tester cela. attendez s'il vous plaît. – htm11h

+0

Non, cela n'a pas résolu le problème. – htm11h

+0

Pouvez-vous essayer 'itemDataSource1.InsertParameters [" short_Text "]. DefaultValue = short_Text' pour les deux params au lieu de la méthode .add –