我在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 用於在編輯模式下從數據庫刪除後插入數據。
解決我的問題的任何建議?
Update方法請記住,連接到一個DataAdapter的命令executd僅當有DataTable中的變化進行更新。 – Steve