使用WCF从Gridview保存

本文关键字:保存 Gridview WCF 使用 | 更新日期: 2023-09-27 18:18:37

所以我使用Gridview与WCF。我已经设法从文本框插入到gridview,但现在我正在努力通过WCF服务保存gridview。我已经给它一个尝试,并得到这个错误:

"参数化查询"(@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。

<<p> ProcessDetail代码/strong>
[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; 
        } 
    }
}

使用WCF从Gridview保存

您收到的错误是SQL错误-它与WCF无关,除非它发生在WCF操作契约(方法)中。

基于ProcessDetails的代码,Item1Item2都没有在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; }
}
您编写类的方式没有问题,上面的方法只是让您用更少的输入来完成相同的事情。