2010-12-01 16 views
1

J'essaie de transmettre DataTables à une procédure stockée qui accepte plusieurs paramètres de table. Le problème est, il semble que tous les paramètres sont passés au premier si je reçois des erreurs comme ceci:Passage de plusieurs tables à une procédure stockée avec plusieurs paramètres de valeur table problème

Essayer de passer un paramètre table d'une valeur de 13 colonne (s) où le correspondant Le type de table défini par l'utilisateur requiert 17 colonne (s).

Voici mon code ..

tête de procédure stockée:

CREATE PROCEDURE TestProc 
@Parm1 Temp1TableType READONLY, 
@Parm2 Temp2TableType READONLY, 
@Parm3 Temp3TableType READONLY, 
@Parm4 Temp4TableType READONLY, 
@Parm5 Temp5TableType READONLY 

@ Parm1 a 17 colonnes, @ Parm2 13 colonnes, @ Parm3 3 colonnes, @ PARM4 11 colonnes et @ Parm5 a 8 colonnes.

code C# (j'utilise Microsoft.ApplicationBlocks)

DataTable dtTable1 = dsSource.Tables[0]; 
DataTable dtTable2 = dsSource.Tables[1]; 
DataTable dtTable3 = dsSource.Tables[2]; 
DataTable dtTable4 = dsSource.Tables[3]; 
DataTable dtTable5 = dsSource.Tables[4]; 

SqlParameter param1 = new SqlParameter("@Parm1", dtTable1); 
SqlParameter param2 = new SqlParameter("@Parm2", dtTable2); 
SqlParameter param3 = new SqlParameter("@Parm3", dtTable3); 
SqlParameter param4 = new SqlParameter("@Parm4", dtTable4); 
SqlParameter param5 = new SqlParameter("@Parm5", dtTable5); 

param1.SqlDbType = SqlDbType.Structured; 
param2.SqlDbType = SqlDbType.Structured; 
param3.SqlDbType = SqlDbType.Structured; 
param4.SqlDbType = SqlDbType.Structured; 
param5.SqlDbType = SqlDbType.Structured; 

SqlParameter[] parms = new SqlParameter[5]; 
parms[0] = param1; 
parms[1] = param2; 
parms[2] = param3; 
parms[3] = param4; 
parms[4] = param5; 

returnVal = SqlHelper.ExecuteScalar(CfgKeys.ConnString, CommandType.StoredProcedure, "TestProc", parms); 

Aujourd'hui j'essayé d'utiliser SqlClient au lieu de Microsoft.ApplicationBlocks mais j'ai toujours la même erreur. Quand j'exécute cela, il semble que tous les paramètres sont passés à @ Param1, d'où l'erreur que j'ai mentionnée plus haut. Cela fonctionne quand je lance manuellement la procédure dans TSQL, donc l'erreur est sur mon code. Quelqu'un peut-il repérer où je me suis trompé?

TIA!

Répondre

1

Trouvé le problème .. Oublié de mentionner que les données DataTable sont envoyées via un service Web, il utilisait donc la méthode DataSet GetXml. Le problème était que la méthode GetXml n'incluait pas les colonnes NULL, d'où les colonnes manquantes.

Merci les gars!

+1

De rien. – kahoon