0

私は WCF Web サービスを使用しておりLinq-To-SQL、新しいレコードを挿入しています。

ただし、Web サービスでは 2 つのフィールドと を設定してCreatedByいますCreatedが、パラメーターを使用しても( MSDNrefで提案されているように)、変更はクライアントに反映されません。したがって、サービスをデバッグすると、プロパティが設定され、レコードが正しく挿入されますが、呼び出し元のメソッドではオブジェクトのプロパティがまだ設定されていません。

これは後で問題を引き起こします。たとえば、削除しようとすると、次の例外が発生します。db.SubmitChanges()これらの列は 次のとおりですnon-null

System.Data.SqlTypes.SqlTypeException: SqlDateTime オーバーフロー。1753 年 1 月 1 日 12:00:00 AM から 9999 年 12 月 31 日 11:59:59 PM の間である必要があります。

クライアント(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();
}

これは Web サービス メソッドです。

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 に答える