2013-06-14 2 views
0

donc j'utilise Gridview avec un WCF. J'ai réussi à insérer des boîtes de texte à gridiview, mais maintenant je me bats pour sauver le gridview via le service WCF. Je donne une tentative et d'obtenir cette erreur:Enregistrer De Gridview en utilisant un WCF

"The parametrized query '(@Item1 narchar(4),@Item2 nvarchar(4000)) insert into ' expects the parameter '@item2', which was not supplied."

voici mon code:

public string InsertProcesses(ProcessDetails proDetails) 
{ 
    string Message; 
    SqlConnection con = new SqlConnection(@"Data Source=localhost;Initial Catalog=WCFTest;Integrated Security=True;Pooling=False"); 
    con.Open(); 

    SqlCommand cmd = new SqlCommand("insert into SaveProcesses(Item1, Item2)values(@Item1, @Item2)", con); 
    cmd.Parameters.AddWithValue("@Item1", proDetails.Item1); 
    cmd.Parameters.AddWithValue("@Item2", proDetails.Item2); 
    int result = cmd.ExecuteNonQuery(); 

    if (result == 1) 
    { 
     Message = proDetails.Item1+ "Details accepted"; 
    } 
    else 
    { 
     Message = proDetails.Item1+ "Details not accepted"; 
    } 

    con.Close(); 

    return Message; 
} 

for (int i = 0; i < dataGridView2.Rows.Count; i++) 
{ 
    ServiceReference6.ProcessDetails det2 = new ServiceReference6.ProcessDetails(); 

    det2.Processes = dataGridView2.Rows[i].Cells["Item1"].Value.ToString(); 
    det2.Processes = dataGridView2.Rows[i].Cells["Item2"].Value.ToString(); 
    obj6.InsertProcesses(det2); 

Merci pour toute aide qui peut être donné. S'il vous plaît noter que c'est la première fois que je tente une WCF.

Code ProcessDetail

[DataContract] 
public class ProcessDetails 
{ 
    int id; 
    string item1; 
    string item2; 

    [DataMember] 
    public int Id 
    { 
     get 
     { 
      return id; 
     } 
     set 
     { 
      id = value; 
     } 
    } 

    [DataMember] 
    public string Item1 
    { 
     get 
     { 
      return item1; 
     } 
     set 
     { 
      item1 = value; 
     } 
    } 

    [DataMember] 
    public string Item2 
    { 
     get 
     { 
      return item2; 
     } 
     set 
     { 
      item2 = value; 
     } 
    } 
} 
+0

Est-ce que 'proDetails.Item2' est nul? – Tim

+0

Le point 2 contient des informations. Et dans la base de données aucune d'entre elles sont définies comme null, désolé je suis nouveau à WCF et devient confus – Andrew

+0

Vous avez une erreur SQL, pas une erreur WCF. Ce que vous attendez avec Item2 ne se passe pas. Qu'est-ce que 'det2.Processes'? Quoi qu'il en soit, vous l'écrasez dans votre boucle for lorsque vous lui affectez la cellule "item2". Pouvez-vous poster plus de votre code? – Tim

Répondre

1

L'erreur que vous recevez est une erreur SQL - ce n'est pas lié à WCF, sauf qu'il se passe dans un contrat d'exploitation de WCF (méthode).

Basé sur le code pour ProcessDetails, les deux Item1 et Item2 ne sont pas se régler dans votre boucle for (vous définissez la même propriété [inexistante] dans les deux lignes). Quelque chose comme cela semble être plus approprié:

det2.Item1 = dataGridView2.Rows[i].Cells["item1"].Value.ToString(); 
det2.Item2 = dataGridView2.Rows[i].Cells["item2"].Value.ToString(); 

Vous pouvez également utiliser les propriétés automatiques dans votre contrat de données pour avoir moins de code:

[DataContract] 
public class ProcessDetails 
{ 

    [DataMember] 
    public int Id { get; set; } 

    [DataMember] 
    public string Item1 { get; set; } 

    [DataMember] 
    public string Item2 { get; set; } 
} 

Il n'y a rien de mal avec la façon dont vous avez écrit la classe , la méthode ci-dessus vous permet de faire la même chose avec moins de frappe.

+0

Donc, c'est quelque chose à voir avec ma base de données SQL? – Andrew

+0

Non - ou du moins pas nécessairement.Le problème est que le code affiché ne remplissait pas les propriétés 'Item1' et' Item2' - vous assigniez les deux cellules de la grille à une propriété nommée 'Processes' (qui n'existe même pas dans votre code DataContract), donc vous transmettiez des valeurs nulles dans les paramètres de votre commande SQL. – Tim

+0

Processus était destiné à être Item1 et Item2, je changeais les noms de colonnes .. J'ai remarqué que j'ai fait une erreur courte qui a été listée item1 deux fois au lieu de item1 et item2 où "processes" est, changé autour et j'obtiens cette erreur "Référence d'objet non définie à une instance d'un objet" Merci pour l'aide jusqu'à présent par le chemin – Andrew

Questions connexes