2011-02-05 78 views
0

我的要求是,如果用戶單擊更新數據而不更改表單上的任何字段,我希望顯示爲沒有更改,如果有任何更改,我想更新數據任何人都可以告訴我的例程出了什麼問題

我寫了一個例行程序如下更新數據

CREATE DEFINER=`root`@`%` PROCEDURE `uspEmployeeFaxDetailsUpdate`(_EmpID int(11), 
_FaxNumberTypeID varchar(45), 
_FaxNumber decimal(10,0), 
_EndDate datetime) 

BEGIN 

declare p_ecount int; 

    set p_ecount= (select count(1) from tblemployeefaxdetails where 
FaxNumberTypeID=_FaxNumberTypeID and 
FaxNumber=_FaxNumber and 
EndDate='9999-12-31'); 

if p_ecount=0 then 

begin 

update tblemployeefaxdetails 

    set 

    EndDate=_EndDate WHERE EmpID=_EmpID and EndDate="9999-12-31"; 

    insert into tblemployeefaxdetails(EmpID,FaxNumberTypeID,FaxNumber,StartDate,EndDate) values 
    (_EmpID,_FaxNumberTypeID,_FaxNumber,curdate(),'9999-12-31'); 

    end; 
    end if; 

END

我得到了一段時間我需要的信息,但一段時間後它顯示的更新消息

這是我在更新

oEmployeePersonalData.EmpID = EmpID; 
     oEmployeePersonalData.FaxNumberTypeID = ddlFaxTypeID.SelectedItem.Text; 
     oEmployeePersonalData.FaxNumber = Convert.ToInt64(txtFaxNumber.Text); 
     oEmployeePersonalData.EndDate = DateTime.Today.AddDays(-1); 
     if (oEmployeePersonalData.FaxDetailUpdate()) 
     { 
      oMsg.Message = "Updated Sucessfully"; 
      Label m_locallblMessage; 
      oMsg.AlertMessageBox(out m_locallblMessage); 
      Page.Controls.Add(m_locallblMessage); 
         } 
     else 
     { 
      oMsg.Message = "Not Sucessfully"; 
      Label m_locallblMessage; 
      oMsg.AlertMessageBox(out m_locallblMessage); 
      Page.Controls.Add(m_locallblMessage); 
     } 

更新代碼

public bool FaxDetailUpdate() 
    { 
     m_bFlag = false; 
     try 
     { 

      m_oCmd = new MySqlCommand(StoredProcNames.tblEmployeeFaxdetails_uspEmployeeFaxdetailsUpdate, m_oConn); 
      m_oCmd.CommandType = CommandType.StoredProcedure; 
      m_oCmd.Parameters.AddWithValue("_EmpID", EmpID); 
      m_oCmd.Parameters.AddWithValue("_FaxNumberTypeID", FaxNumberTypeID); 
      m_oCmd.Parameters.AddWithValue("_FaxNumber", FaxNumber); 
      m_oCmd.Parameters.AddWithValue("_EndDate", EndDate); 
      if (m_oConn.State == ConnectionState.Closed) 
      { 
       m_oConn.Open(); 
      } 
      if ((m_oCmd.ExecuteNonQuery()) > 0) 
      { 
       this.m_bFlag = true; 
      } 
     } 
     catch (MySqlException oSqlEx) 
     { 
      m_sbErrMsg.Length = 0; 
      m_sbErrMsg = Utilities.SqlErrorMessage(oSqlEx); 
      //DB write the Error Log 
      m_oErrlog.Add(m_sbErrMsg.ToString(), DateTime.Now); 
     } 
     catch (Exception oEx) 
     { 
      m_sbErrMsg = Utilities.ErrorMessage(oEx); 
      //DB write the Error Log 
      m_oErrlog.Add(m_sbErrMsg.ToString(), DateTime.Now); 
     } 
     finally 
     { 
      m_oConn.Close(); 
     } 
     return this.m_bFlag; 
    } 

我沒有得到任何錯誤,但我想按我說

任何一個可以告訴要做的代碼是什麼我必須在此做出的更改

+0

你可以給錯誤的詳細信息?你能否至少顯示'FaxDetailUpdate()'的代碼? – kelloti

+0

@Kelloti: - 我沒有收到任何錯誤,但我想按照我的要求完成,因爲我說 – Dotnet

回答

0

我不太瞭解例程,9999-12-31表示的神奇日期以及爲何插入新記錄而不是更新舊版本。

你可以做的是,如果行被改變或者沒有改變,程序會返回一個指標,通過參數OUT返回p_ecount的值。

有關如何使用使用OUT參數的詳細信息.NET MySQL客戶端看到http://dev.mysql.com/doc/refman/5.0/en/connector-net-programming-stored.html

+0

其實我正在做薪資信息,所以我不應該編輯舊記錄舊記錄應該是相同的,編輯應該更新並在到期時保存它是結束日期 – Dotnet

+0

我認爲這個神奇日期應該是DateTime.Max。 @Dorababu,我有一種感覺,'EndDate'應該是一個帶有null的可空列,這意味着它永遠不會結束。如果你感覺很勇敢,我建議你重構數據庫就是這樣。 – kelloti

相關問題