2010-12-07 3 views
0

Qu'est-ce que je fais mal? Essayer de transmettre mon fichier DataTable à un processus stocké à l'aide de LINQ. Voici mon code.ASP.NET appelant proc stockée avec LINQ et passant dans DataTable

 
var sqlCommand = new System.Data.SqlClient.SqlCommand { 
    CommandType = System.Data.CommandType.StoredProcedure, 
    CommandText = "UserIdList" 
}; 

var dataTable = new System.Data.DataTable("IdList"); 
dataTable.Columns.Add("AttributeIds", typeof(Int32)); 
dataTable.Rows.Add(26); 
dataTable.Rows.Add(40); 
dataTable.Rows.Add(41); 
dataTable.Rows.Add(45); 
dataTable.Rows.Add(78); 
dataTable.Rows.Add(33); 
dataTable.Rows.Add(36); 

//The parameter for the SP must be of SqlDbType.Structured 
var parameter = new System.Data.SqlClient.SqlParameter { 
    ParameterName = "@AttributeIds", 
    SqlDbType = System.Data.SqlDbType.Structured, 
    TypeName = "ecs.IDList", 
    Value = dataTable, 
}; 

sqlCommand.Parameters.Add(parameter); 

var user = myDC.DC.ExecuteQuery("exec ecs.udpUserAttributeDetails {0}, {1}", sqlCommand, userId).SingleOrDefault(); 


+0

Et l'erreur que vous obtenez est ?? – InSane

+0

@InSane - Le message d'erreur est: Un paramètre de requête ne peut pas être de type 'System.Data.SqlClient.SqlCommand'. – Mark

+0

Quel est le type de données de l'objet 'myDC.DC'? – InSane

Répondre

1

Cela semble être le problème

var user = myDC.DC.ExecuteQuery("exec ecs.udpUserAttributeDetails {0}, {1}", sqlCommand, userId).SingleOrDefault(); 

Dans votre code, vous passez un objet sqlCommand comme les premiers paramètres et la userId comme le 2ème paramètre.

Un contexte de données ExecuteQuery method has 2 overloads

ExecuteQuery<TResult>(String, Object[]) 
ExecuteQuery(Type, String, Object[]) 

Vous semblez être en utilisant surcharge 1 - c.-à-ExecuteQuery<TResult>(String, Object[]) mais dans ce cas, vous devez spécifier le type de l'objet retourné

par exemple: -

var customers = db.ExecuteQuery<Customer>(@"SELECT CustomerID, CompanyName, ContactName FROM dbo.Customers WHERE City = {0}", "London"); 

REMARQUE: db.ExecuteQuery<Customer> dans l'exemple ci-dessus est ce que je suis ferrer à.

Je pense que cela pourrait être la cause de l'erreur car le compilateur mappe votre demande pour surcharger 2 à la place qui ne renvoie aucune valeur mais prend en 3 paramètres résultant de votre erreur A query parameter cannot be of type 'System.Data.SqlClient.SqlCommand.

Questions connexes