C#For Transaction in Transaction但没有插入数据

时间:2014-01-28 14:23:40

标签: c# ado.net transactionscope

我在数据库表中插入数据列表。每件事都运行正常但是当我在数据库中看到我的表时,它是空的!它没有显示任何记录。

这是我的功能:

public int addBulkLeadStages(List<LeadStage> allLeadStages)
    {
        //throw new NotImplementedException();
        SqlConnection connection;
        SqlCommand cmd;
        int effectedRows = 0;
        int rowsCount = 0;
        int updatedRowsCount = 0;
        using (TransactionScope trans = new TransactionScope())
        {
            using (connection = new SqlConnection(SalesForceDBManager.getConnectionString(SalesForceDB.CONNECTION_STRING)))
            {
                //Open Connection
                connection.Open();                
                //Craete Command
                cmd = connection.CreateCommand();
                int noOfLeadStages = allLeadStages.Count;
                for (int i = 0; i < noOfLeadStages; i++)
                {
                    //Check If entry already available
                    if (isLeadStageRecordExist(allLeadStages[i].ID,connection))
                    {
                        //Update Existing Record
                        updatedRowsCount = updateLeadStage(connection, allLeadStages[i].ID, allLeadStages[i]);
                    }
                    else
                    {
                        cmd.CommandText = "INSERT INTO " + SalesForceDB.LeadStage.TABLE_LEAD_STAGE + "(" +
                            SalesForceDB.LeadStage.COLUMN_ID + "," + SalesForceDB.LeadStage.COLUMN_NAME + "," +
                            SalesForceDB.LeadStage.COLUMN_COMMENTS_REMARKS + "," + SalesForceDB.LeadStage.COLUMN_ENTRY_POINT + "," +
                            SalesForceDB.LeadStage.COLUMN_EXIT_POINT + "," + SalesForceDB.CommonColumns.COLUMN_IS_ACTIVE + "," +
                            SalesForceDB.LeadStage.COLUMN_SEQUENCE_NO + "," + SalesForceDB.LeadStage.COLUMN_STAGE_DESCRIPTION + "," +
                            SalesForceDB.CommonColumns.COLUMN_CREATED_BY + "," + SalesForceDB.CommonColumns.COLUMN_CREATED_DATE + "," +
                            SalesForceDB.CommonColumns.COLUMN_LAST_MODIFIED_BY + "," + SalesForceDB.CommonColumns.COLUMN_LAST_MODIFIED_DATE + ")" +
                            " VALUES (@ID,@StageName,@CommentsRemarks,@EntryPoint,@ExitPoint,@IsActive,@SequenceNo,@StageDesc,@CreatedBy,@CreatedDate," +
                            "@LastModifiedBy,@LastModifiedDate)";

                        //Adding Command Parameters
                        cmd.Parameters.AddWithValue("@ID", allLeadStages[i].ID);
                        cmd.Parameters.AddWithValue("@StageName", allLeadStages[i].Name);
                        cmd.Parameters.AddWithValue("@CommentsRemarks", allLeadStages[i].Comments);
                        cmd.Parameters.AddWithValue("@EntryPoint", allLeadStages[i].EntryPoint);
                        cmd.Parameters.AddWithValue("@ExitPoint", allLeadStages[i].ExitPoint);
                        cmd.Parameters.AddWithValue("@IsActive", allLeadStages[i].IsActive);
                        cmd.Parameters.AddWithValue("@SequenceNo", allLeadStages[i].SequenceNo);
                        cmd.Parameters.AddWithValue("@StageDesc", allLeadStages[i].Description);
                        cmd.Parameters.AddWithValue("@CreatedDate", allLeadStages[i].CreatedDate);
                        cmd.Parameters.AddWithValue("@CreatedBy", allLeadStages[i].CreatedBy);
                        cmd.Parameters.AddWithValue("@LastModifiedBy", allLeadStages[i].LastModifiedBy);
                        cmd.Parameters.AddWithValue("@LastModifiedDate", allLeadStages[i].LastModifiedDate);
                        //Execute query
                        effectedRows = cmd.ExecuteNonQuery();
                        rowsCount += effectedRows;
                        cmd.Parameters.Clear();
                    }
                }
            }
            return rowsCount;
        }
    }

这是我的连接字符串。

Data Source=FAIZAN;Initial Catalog=SalesForceBuild015;Integrated Security=SSPI

工作正常!输入列表包含11条记录,它输出精确的11个计数,但数据库表为空!我无法弄清楚为什么。我在这里缺少什么?

TransactionScope可以吗?

谢谢!

1 个答案:

答案 0 :(得分:3)

您需要在代码中的某个位置调用trans.Complete();。否则,该事务将被回滚。

public int addBulkLeadStages(List<LeadStage> allLeadStages)
{
    //throw new NotImplementedException();
    SqlConnection connection;
    SqlCommand cmd;
    int effectedRows = 0;
    int rowsCount = 0;
    int updatedRowsCount = 0;
    using (TransactionScope trans = new TransactionScope())
    {
        using (connection = new SqlConnection(SalesForceDBManager.getConnectionString(SalesForceDB.CONNECTION_STRING)))
        {
            //Open Connection
            connection.Open();                
            //Craete Command
            cmd = connection.CreateCommand();
            int noOfLeadStages = allLeadStages.Count;
            for (int i = 0; i < noOfLeadStages; i++)
            {
                //Check If entry already available
                if (isLeadStageRecordExist(allLeadStages[i].ID,connection))
                {
                    //Update Existing Record
                    updatedRowsCount = updateLeadStage(connection, allLeadStages[i].ID, allLeadStages[i]);
                }
                else
                {
                    cmd.CommandText = "INSERT INTO " + SalesForceDB.LeadStage.TABLE_LEAD_STAGE + "(" +
                        SalesForceDB.LeadStage.COLUMN_ID + "," + SalesForceDB.LeadStage.COLUMN_NAME + "," +
                        SalesForceDB.LeadStage.COLUMN_COMMENTS_REMARKS + "," + SalesForceDB.LeadStage.COLUMN_ENTRY_POINT + "," +
                        SalesForceDB.LeadStage.COLUMN_EXIT_POINT + "," + SalesForceDB.CommonColumns.COLUMN_IS_ACTIVE + "," +
                        SalesForceDB.LeadStage.COLUMN_SEQUENCE_NO + "," + SalesForceDB.LeadStage.COLUMN_STAGE_DESCRIPTION + "," +
                        SalesForceDB.CommonColumns.COLUMN_CREATED_BY + "," + SalesForceDB.CommonColumns.COLUMN_CREATED_DATE + "," +
                        SalesForceDB.CommonColumns.COLUMN_LAST_MODIFIED_BY + "," + SalesForceDB.CommonColumns.COLUMN_LAST_MODIFIED_DATE + ")" +
                        " VALUES (@ID,@StageName,@CommentsRemarks,@EntryPoint,@ExitPoint,@IsActive,@SequenceNo,@StageDesc,@CreatedBy,@CreatedDate," +
                        "@LastModifiedBy,@LastModifiedDate)";

                    //Adding Command Parameters
                    cmd.Parameters.AddWithValue("@ID", allLeadStages[i].ID);
                    cmd.Parameters.AddWithValue("@StageName", allLeadStages[i].Name);
                    cmd.Parameters.AddWithValue("@CommentsRemarks", allLeadStages[i].Comments);
                    cmd.Parameters.AddWithValue("@EntryPoint", allLeadStages[i].EntryPoint);
                    cmd.Parameters.AddWithValue("@ExitPoint", allLeadStages[i].ExitPoint);
                    cmd.Parameters.AddWithValue("@IsActive", allLeadStages[i].IsActive);
                    cmd.Parameters.AddWithValue("@SequenceNo", allLeadStages[i].SequenceNo);
                    cmd.Parameters.AddWithValue("@StageDesc", allLeadStages[i].Description);
                    cmd.Parameters.AddWithValue("@CreatedDate", allLeadStages[i].CreatedDate);
                    cmd.Parameters.AddWithValue("@CreatedBy", allLeadStages[i].CreatedBy);
                    cmd.Parameters.AddWithValue("@LastModifiedBy", allLeadStages[i].LastModifiedBy);
                    cmd.Parameters.AddWithValue("@LastModifiedDate", allLeadStages[i].LastModifiedDate);
                    //Execute query
                    effectedRows = cmd.ExecuteNonQuery();
                    rowsCount += effectedRows;
                    cmd.Parameters.Clear();
                }
            }

            trans.Complete(); // <-- THIS IS MISSING!
        }
        return rowsCount;
    }
}