Сохранить из 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; }
}
Нет ничего плохого в том, как вы написали класс, вышеописанный способ позволяет вам делать то же самое с меньшим набором текста.