2013-07-25 20 views
-1

我在mvc3中創建一個會計應用程序。我有日記憑證的形式it.in這種形式主數據和詳細數據是在單個view.i使用HTML表格和文本框在html表中創建我的grid.I保存我的數據到sql server 2008 r2數據庫在2表中幫助json和wcf服務在單擊按鈕(單擊保存按鈕時單擊所有主數據和詳細數據插入到數據庫中)。每個網格線上沒有編輯按鈕用於將數據編輯到數據庫中 現在我想執行我的表單編輯功能單按鈕點擊進入數據庫 爲此,我有一個想法,我使用sqltransaction對象,並從數據庫中暫時刪除數據,然後插入新的數據到數據庫,然後執行sqltran.commit或sqltrans.rollback成功/失敗交易的基地
爲此,我在DAL中創建一個函數,首先將sqltransaction與命令綁定,然後刪除函數具有dataadapter和存儲過程的nality。
但我的存儲過程不被調用和數據不會刪除我監視它在SQL服務器分析器。
我在這裏粘貼我的代碼plzzz任何一個告訴我我犯的錯誤。
刪除程序不在mvc3剃鬚刀的sqldataadapter.Delete命令中調用

public bool JVInsertDAL1(JVEntity Obj, bool FMode, bool EMode, bool DMode) 
    { 

     bool FinRes = false; 
     DataSet ObjDs = new DataSet(); 
     //function call to fill tables scheme in dataset 

     ObjDs = FillDSDAL(ObjDs, "", ""); 
     if (FMode == false && DMode == true) 
     { 

      ObjDs = FillDSDAL(ObjDs, Obj.VNo, Obj.Type); 
     } 
       //============================== 

     ///*********MASTER DATA INSERTION************************ 
     if (EMode != true || DMode != false) 
     { 
      if (sqlConnection.State == ConnectionState.Closed) 
      { 
       sqlConnection.Open(); 
      } 
      sqlTransaction = sqlConnection.BeginTransaction(); 
     } 
     try 
     { 

      if (FMode == false && DMode == true) 
      { 

SqlCommand cmdDeleteLedg = new SqlCommand("SpGLdelete", sqlConnection, sqlTransaction); 
cmdDeleteLedg.CommandType = CommandType.StoredProcedure; 

SqlCommand cmdDeleteHead = new SqlCommand("SpGlHeadDelete", sqlConnection, sqlTransaction); 
cmdDeleteHead.CommandType = CommandType.StoredProcedure; 

cmdDeleteHead.Parameters.Add("@VNo", SqlDbType.Char, 10, "VNo").Value = Obj.VNo; 
cmdDeleteHead.Parameters.Add("@Type", SqlDbType.Char, 2, "Type").Value=Obj.Type; 

cmdDeleteLedg.Parameters.Add("@VNo", SqlDbType.Char, 10, "VNo").Value = Obj.VNo; 
cmdDeleteLedg.Parameters.Add("@Type", SqlDbType.Char, 2, "Type").Value = Obj.Type; 
//-----------------PROCEDURE FOR DELETE RECORD DURING EDIT MODE-------------   
       ObjDadp.DeleteCommand = cmdDeleteLedg; 
       ObjDadp.Update(ObjDs, "Gledg"); 

       ObjDadp.DeleteCommand = cmdDeleteHead; 
       ObjDadp.Update(ObjDs, "Glhead"); 

       ObjDs.AcceptChanges(); 
       ObjDs.Clear(); 
      } 
      if (FMode == true) 
      { 

SqlCommand sqlCommand = new SqlCommand("SPJVHeadInsert", sqlConnection, sqlTransaction); 
sqlCommand.CommandType = CommandType.StoredProcedure; 

SqlCommand sqlCommand1 = new SqlCommand("SPJVLedgInsert", sqlConnection, sqlTransaction); 
sqlCommand1.CommandType = CommandType.StoredProcedure; 

sqlCommand.Parameters.Add("@Type", SqlDbType.Char, 2, "Type"); 
sqlCommand.Parameters.Add("@VNo", SqlDbType.Char, 10, "VNo"); 
sqlCommand.Parameters.Add("@VDate", SqlDbType.DateTime, 10, "VDate"); 

sqlCommand1.Parameters.Add("@Type", SqlDbType.Char, 2, "Type"); 
sqlCommand1.Parameters.Add("@VNo", SqlDbType.Char, 10, "VNo"); 
sqlCommand1.Parameters.Add("@VDate", SqlDbType.DateTime, 10, "VDate"); 
sqlCommand1.Parameters.Add("@Code", SqlDbType.Char, 10, "Code"); 
     ObjRow = ObjDs.Tables["GlHead"].NewRow(); 
        ObjRow["Type"] = Obj.Type; 
        ObjRow["VNo"] = Obj.VNo; 
        ObjRow["VDate"] = Obj.VDate; 
        ObjRow["RefRemarks"] = Obj.RefRemarks; 
        ObjDs.Tables["GlHead"].Rows.Add(ObjRow); 

        foreach (var trans in Obj.GLedg) 
        { 
         ObjRow = ObjDs.Tables["Gledg"].NewRow(); 
         ObjRow["Type"] = trans.Type; 
         ObjRow["VNo"] = trans.VNo; 
         ObjRow["VDate"] = trans.VDate; 
         ObjRow["Code"] = trans.Code; 
         ObjDs.Tables["Gledg"].Rows.Add(ObjRow); 
        } 

       //---------------------------------------------------- 
      ObjDadp.InsertCommand = sqlCommand; 
      ObjDadp.Update(ObjDs, "GlHead"); 

      ObjDadp.InsertCommand = sqlCommand1; 
      ObjDadp.Update(ObjDs, "GLedg"); 
       //---------------------------------------------------- 

      }//END OF FMODE=TRUE CONDITION 
      //------------------------------------------------------ 

      //****************************************    
      if (DMode != true || EMode != true) 
      // if (EMode != true || DMode != false) 
      { 
       sqlTransaction.Commit(); 
      } 
      //************************************ 
     }//end of try 
     catch (SqlException sqlError) 
     { 
      sqlTransaction.Rollback(); 

     } 
     catch (Exception ex) 
     { 
      sqlTransaction.Rollback(); 
     } 
     finally 
     { 
      if (EMode != true || DMode != true) 
      { 
       if (sqlConnection.State == ConnectionState.Open) 
{ 
sqlConnection.Close(); 
} 
} 
}    
//******end of detail insertion*************************************************** 
if (FMode == false && DMode == true) 
{ 
if (ObjDs.HasErrors== false) 
{ 
FinRes = true; 
} 
else 
{ 
FinRes = false; 
} 
} 
if (FMode == true) 
{ 
if (ObjDs.HasErrors == false) 
{ 
FinRes = true; 
} 
else 
{ 
FinRes = false; 
} 
}    
return FinRes; 
} 

在上面的代碼中我通過FMODE:真,EMode:假,DMode:假用於保存數據,並將其插入數據的數據庫。
FMode:false,EMode:true,DMode:true 當在編輯模式下從數據庫刪除數據時。
最後FMode:true,EMode:true,DMode:false 用於在編輯模式下從數據庫刪除後插入數據。

解決我的問題的任何建議?

+0

Update方法請記住,連接到一個DataAdapter的命令executd僅當有DataTable中的變化進行更新。 – Steve

回答

0

從上面的代碼看來,你不會改變表GlheadGledg的內容。

當上述表的行全部處於DataRowState.Unchanged狀態時,將調用SqlDataAdapter的Update方法,結果不對數據庫執行任何操作。

當應用程序調用Update方法,DbDataAdapter的 檢查RowState屬性,並執行所需的INSERT, UPDATE,或迭代地DELETE語句對於每一行,基於 順序索引的在配置上數據集。

您需要從數據表中刪除該行,然後調用的SqlDataAdapter的

+0

感謝史蒂夫現在我明白了實際的問題 –