-1

mvc3 で会計アプリケーションを作成します。仕訳伝票フォームがあります。このフォームのマスターと詳細データは単一のビューにあります。グリッドを作成するためにhtmlテーブルとhtmlテーブルのテキストボックスを使用します。助けを借りて2つのテーブルのSQL Server 2008 r2データベースにデータを保存しましたシングルボタンクリックでのjsonおよびwcfサービスの。(保存ボタンをクリックすると、すべてのマスターおよび詳細データがデータベースに挿入されることを意味します。データベースにデータを編集するための各グリッドラインに編集ボタンはありません。今、フォームの編集を実行したいデータベースへのシングルボタンクリックの機能この目的のために、私はsqltransactionオブジェクトを使用して一時的にデータベースからデータを削除し、新しいデータをデータベースに挿入してから、成功/失敗ベースでsqltran.commitまたはsqltrans.rollbackを実行するという考えを持っています取引。
この目的のために、最初にsqltransactionをコマンドにバインドし、次にdataadapterとストアドプロシージャを使用して機能を削除するDALで関数を作成します。
しかし、ストアド プロシージャは呼び出されず、データは削除されません。SQL Server プロファイラーで監視します。
私はここに私のコードを貼り付けますplzzzどこで間違いをしたか教えてください。

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: true、EMode: false、DMode: false を渡し、データをデータベースに挿入します。編集モードでデータベースからデータを削除する場合
、FMode: false、EMode: true、DMode: true 。 最後に、FMode: true、EMode: true、DMode: falseは、編集モードでデータベースから削除した後にデータを挿入します。

私の問題を解決するための提案はありますか?

4

1 に答える 1

0

Glhead上記のコードから、テーブルとの内容を変更していないように見えますGledg

上記のテーブルの行がすべて DataRowState.Unchanged の状態にある場合に SqlDataAdapterのUpdateメソッドを呼び出すと、データベースに対して何も行われません。

アプリケーションが Update メソッドを呼び出すと、DbDataAdapter は RowState プロパティを調べ、DataSet で構成されたインデックスの順序に基づいて、行ごとに必要な INSERT、UPDATE、または DELETE ステートメントを繰り返し実行します。

データテーブルから行を削除してから、SqlDataAdapter の Update メソッドを呼び出す必要があります

于 2013-07-25T09:21:27.393 に答える