2012-10-09 5 views
1

테이블에서 레코드 목록을 얻으려고하고 나서 foreach 루프에서 update 레코드를 하나 하나 시도하려고합니다.Linq에서 SQL 레코드가 업데이트되지 않습니다.

여기 내 코드입니다

 public IEnumerable<MessageOut> GetSMSInformation() 
     { 
      using (var db = new DataClasses1DataContext()) 
      { 
       var sms = db.MessageOuts.Where(msg => msg.msgstatus.Equals("Pending")).Select(msg => msg); 
       return sms.ToList(); 
      } 
     } 



    public void StartSMSSending() 
     { 
      var information = GetSMSInformation(); 

      foreach (var sms in information) 
      { 
       SendSMS(sms.reciever, sms.msg); 
       UpdateRecords(sms,"Delivered", DateTime.Now); 
      } 
     } 

    public void UpdateRecords(MessageOut sms, string msgStatus, DateTime sentTime) 
     { 
      using (var db = new DataClasses1DataContext()) 
      { 
       sms.msgstatus = msgStatus; 
       sms.senttime = sentTime; 
       db.SubmitChanges(); 
      } 
     } 

단지 update.I뿐만 아니라 오류를 받고 있지 않다하지 않는 기록.

누군가 나를 도와 줄 수 있습니까?

답변

7

:

나의 제안은 다음이 될 것입니다. 위의 예제에서 using 문 안에 선택한 내용을 포함 시키므로 레코드가 반환 된 다음 컨텍스트가 덤프됩니다. 업데이트를 만들 때 새로운 컨텍스트가 있으므로 개체에 등록 된 변경 사항이 없습니다. 이를 수행하는 방법은 컨텍스트를 더 전역 객체로 만들거나 매개 변수로 전달하는 것입니다.

public IEnumerable<MessageOut> GetSMSInformation(DataContext context) 
{ 
    var sms = context.MessageOuts.Where(
     msg => msg.msgstatus.Equals("Pending")).Select(msg => msg); 
    return sms.ToList(); 
} 

public void StartSMSSending() 
{ 
    using (var db = new DataClasses1DataContext()) 
    { 
     var information = GetSMSInformation(db); 

     foreach (var sms in information) 
     { 
      SendSMS(sms.reciever, sms.msg); 
      UpdateRecords(sms,"Delivered", DateTime.Now, db); 
     } 
    } 
} 

public void UpdateRecords(MessageOut sms, string msgStatus, DateTime sentTime, DataContext context) 
{ 
    sms.msgstatus = msgStatus; 
    sms.senttime = sentTime; 
    context.SubmitChanges(); 
} 

또는이 (내 원하는 방법을) 할 수는 :

public IEnumerable<MessageOut> GetSMSInformation() 
{ 
    var sms = Context.MessageOuts.Where(
     msg => msg.msgstatus.Equals("Pending")).Select(msg => msg); 
    return sms.ToList(); 
} 

public void StartSMSSending() 
{ 
    var information = GetSMSInformation(db); 

    foreach (var sms in information) 
    { 
     SendSMS(sms.reciever, sms.msg); 
     UpdateRecords(sms,"Delivered", DateTime.Now, db); 
    } 
} 

public void UpdateRecords(MessageOut sms, string msgStatus, DateTime sentTime) 
{ 
    sms.msgstatus = msgStatus; 
    sms.senttime = sentTime; 
    Context.SubmitChanges(); 
} 

private DataClasses1DataContext _context = null; 
public DataClasses1DataContextContext 
{ 
    get 
    { 
     return _context ?? (_context = new DataClasses1DataContext()); 
    } 
} 
+0

고마워, 내 실수를 이해했다. + 1 도움. – freebird

3

당신은이 DB 컨텍스트에서 데이터를 추출됩니다

그런 다음 당신은 다른 DB 컨텍스트에 대한 변경 사항 제출 된 이전 DB 컨텍스트에서 데이터를 업데이트하는
public IEnumerable<MessageOut> GetSMSInformation() 
    { 
     using (var db = new DataClasses1DataContext()) 
     { 
      var sms = db.MessageOuts.Where(msg => msg.msgstatus.Equals("Pending")).Select(msg => msg); 
      return sms.ToList(); 
     } 
    } 

:

public void UpdateRecords(MessageOut sms, string msgStatus, DateTime sentTime) 
    { 
     using (var db = new DataClasses1DataContext()) 
     { 
      sms.msgstatus = msgStatus; 
      sms.senttime = sentTime; 
      db.SubmitChanges(); 
     } 
    } 

패스 DB 컨텍스트를 참조 또는 최상의 유지하는 것은 클래스의 구성원입니다. 이렇게하면 클래스 인스턴스에 대한 단일 db 컨텍스트 인스턴스가 보장됩니다. 당신이 살아있는 당신의 컨텍스트를 유지할 필요가 Linq2Sql 클래스와 업데이트 작업을 수행하기 위해

class SmsCenter 
{ 
     private DataClasses1DataContext _dbContext; 

     public SmsCenter() 
     { 
      _dbContext = new DataClasses1DataContext(); 
     } 

     public IEnumerable<MessageOut> GetSMSInformation() 
     { 
      var sms = _dbContext.MessageOuts.Where(msg => msg.msgstatus.Equals("Pending")).Select(msg => msg); 
      return sms.ToList(); 
     } 



     public void StartSMSSending() 
     { 
      var information = GetSMSInformation(); 

      foreach (var sms in information) 
      { 
       SendSMS(sms.reciever, sms.msg); 
       UpdateRecords(sms,"Delivered", DateTime.Now); 
      } 
     } 

     public void UpdateRecords(MessageOut sms, string msgStatus, DateTime sentTime) 
     { 
      sms.msgstatus = msgStatus; 
      sms.senttime = sentTime; 
      _dbContext.SubmitChanges(); 
     } 
} 
+0

감사처럼, DB와 "SMS"개체를 관련 din't. 실수는 무엇인지 알았습니다. + 1. – freebird

1

당신은 도움을

  sms.msgstatus = msgStatus; 
      sms.senttime = sentTime; 
      db.MessageOut.Add(sms); 
      //or 
      db.MessageOut=sms; 
      db.SubmitChanges(); 
관련 문제