Сохранить из Gridview с помощью WCF

Поэтому я использую Gridview с WCF. Мне удалось вставить текстовые поля в gridiview, но сейчас я пытаюсь сохранить вид сетки через службу WCF. Я дал ему попытку и получаю эту ошибку:

"Параметризованный запрос" (@Item1 narchar(4),@Item2 nvarchar(4000)), вставленный в "ожидает параметр" @ item2 ", который не был предоставлен".

вот мой код:

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);   

Спасибо за любую помощь, которая может быть оказана. Пожалуйста, обратите внимание, что я впервые пробую WCF.

Код 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; 
        } 
    }
}

1 ответ

Решение

Ошибка, которую вы получаете, является ошибкой SQL - она ​​не связана с WCF, за исключением того, что это происходит в контракте операции WCF (метод).

На основании кода для ProcessDetails, и то и другое Item1 а также Item2 не устанавливаются в вашем for цикл (вы устанавливаете одно и то же [несуществующее] свойство в обеих строках). Нечто подобное может показаться более подходящим:

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

Кроме того, вы можете использовать автоматические свойства в вашем контракте данных, чтобы иметь меньше кода:

[DataContract] 
public class ProcessDetails 
{ 

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

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

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

Нет ничего плохого в том, как вы написали класс, вышеописанный способ позволяет вам делать то же самое с меньшим набором текста.

Другие вопросы по тегам