0

我正在使用 WCF-webservice 并Linq-To-SQL插入一条新记录。

但是,在 web 服务中,我设置了两个字段,CreatedBy并且Created,但即使我使用ref参数(如MSDN 上所建议的那样),更改也不会反映在客户端上。因此,当我调试服务时,设置了属性并正确插入了记录,但在调用方法中,对象的属性仍未设置。

这将在以后引起问题,例如,如果我尝试删除它,我会得到以下异常,db.SubmitChanges()因为这些列是 non-null

System.Data.SqlTypes.SqlTypeException:SqlDateTime 溢出。必须介于 1753 年 1 月 1 日上午 12:00:00 和 9999 年 12 月 31 日晚上 11:59:59 之间。

这是客户端的插入方法(winforms应用程序):

private void Add_Status()
{
    using (var db = new ERP_ServiceClient())
    {
        var status = new Erp_ServiceReference.Status();
        status.Name = this.txtStatusNameAdd.Text;
        db.InsertStatus(status, this.IdUser);
        statusBindingSource.Add(status);
    }

    this.txtStatusNameAdd.Text = "";
    this.txtStatusNameAdd.Select();
}

这是网络服务方法:

public void InsertStatus(ref Status status, int userID)
{
    using (var db = new ERPDataContext())
    {
        status.CreatedBy = userID;
        status.Created = DateTime.Now;
        db.Status.InsertOnSubmit(status);
        db.SubmitChanges();
    }
}

我究竟做错了什么?我的 wcf、winforms 和 linq-to-sql 技能都生疏了(这就是我选择它们的原因)。

4

1 回答 1

1

您不能在 Web 服务中通过引用传递。 您可以返回该值。

public Status InsertStatus(Status status, int userID)
{
    using (var db = new ERPDataContext())
    {
        status.CreatedBy = userID;
        status.Created = DateTime.Now;
        db.Status.InsertOnSubmit(status);
        db.SubmitChanges();
        return status;
    }
}

private void Add_Status()
{
    using (var db = new ERP_ServiceClient())
    {
        var status = new Erp_ServiceReference.Status();
        status.Name = this.txtStatusNameAdd.Text;
        status = db.InsertStatus(status, this.IdUser);
        statusBindingSource.Add(status);
    }

    this.txtStatusNameAdd.Text = "";
    this.txtStatusNameAdd.Select();
}
于 2013-03-26T17:36:20.503 回答