.net 如何使用c在windows应用程序中使用提交和回滚事务#

.net 如何使用c在windows应用程序中使用提交和回滚事务#,.net,winforms,sql-server-2008,stored-procedures,.net,Winforms,Sql Server 2008,Stored Procedures,我正在使用windows应用程序。我有一个数据集。从这一点上,我使用for循环逐行读取数据。在for循环中,我使用存储过程将数据插入数据库(这个过程在内部for循环中进行) 但我怀疑我是在逐行读取数据并执行存储过程。如果在第三行中,如果得到错误的数据…我会得到异常。但在将两行插入数据库之前。 因此,如果所有数据都正确,我必须进行提交。如果不正确,我必须进行回滚 你能不能请任何人给我一个想法 for (i = 0; i < Passdataset.Tables[0].Rows.Count -

我正在使用windows应用程序。我有一个数据集。从这一点上,我使用for循环逐行读取数据。在for循环中,我使用存储过程将数据插入数据库(这个过程在内部for循环中进行)

但我怀疑我是在逐行读取数据并执行存储过程。如果在第三行中,如果得到错误的数据…我会得到异常。但在将两行插入数据库之前。 因此,如果所有数据都正确,我必须进行提交。如果不正确,我必须进行回滚

你能不能请任何人给我一个想法

for (i = 0; i < Passdataset.Tables[0].Rows.Count - 2; i++)
{
    currentRow = Passdataset.Tables[0].Rows[i];
    if (currentRow == null)
        continue;
    GLItem1 = new taGLTransactionLineInsert_ItemsTaGLTransactionLineInsert();
    GLTrans = new GLTransactionType();
    if (rdoDateFromFile.Checked == true)
    {
        trxdate = currentRow[mapdate].ToString();
    }

    if (singleORdouble != "")
    {
        decimal amount = Convert.ToDecimal(currentRow[amount1].ToString());
        if (amount < 0)
        {
            decimal amt = Math.Abs(amount);
            GLItem1.CRDTAMNT = amt;
        }
        else
        {
            decimal amt1 = Math.Abs(amount);
            GLItem1.DEBITAMT = amt1;
        }
    }

    string con2 = String.Format(@"data source=localhost;initial catalog=TWO;integrated security=SSPI;persist security info=False;packet size=4096");
    SqlConnection strcon = new SqlConnection(con2);

    SqlCommand NextJourna = new SqlCommand("taGetNextJournalEntry", strcon);
    NextJourna.CommandType = CommandType.StoredProcedure;
    NextJourna.CommandText = "taGetNextJournalEntry";
    NextJourna.Parameters.Add("@O_vJournalEntryNumber", SqlDbType.Char, 13);
    NextJourna.Parameters["@O_vJournalEntryNumber"].Direction = ParameterDirection.Output;
    NextJourna.Parameters.Add("@O_iErrorState", SqlDbType.Int, 250);
    NextJourna.Parameters["@O_iErrorState"].Direction = ParameterDirection.Output;
    strcon.Open();

    NextJourna.ExecuteNonQuery();

    foreach (taGLTransactionLineInsert_ItemsTaGLTransactionLineInsert items in LineItems)
    {
        if (items != null)
        {
            SqlCommand myCommand = new SqlCommand("taGLTransactionLineInsert", strcon);
            myCommand.CommandType = CommandType.StoredProcedure;
            myCommand.CommandText = "taGLTransactionLineInsert";
            myCommand.Parameters.Add("@I_vBACHNUMB", SqlDbType.Char).Value = items.BACHNUMB;
            myCommand.Parameters.Add("@I_vCRDTAMNT", SqlDbType.Decimal).Value = items.CRDTAMNT;
            myCommand.Parameters.Add("@I_vDEBITAMT", SqlDbType.Decimal).Value = items.DEBITAMT;
            myCommand.Parameters.Add("@I_vSQNCLINE", SqlDbType.Int).Value = SQNCLINE;
            myCommand.Parameters.Add("@I_vACTNUMST", SqlDbType.Char).Value = items.ACTNUMST;
            myCommand.Parameters.Add("@I_vDSCRIPTN", SqlDbType.Char).Value = items.DSCRIPTN;
            myCommand.Parameters.Add("@I_vJRNENTRY", SqlDbType.Int).Value = nextjournl.Trim();
            myCommand.Parameters.Add("@O_iErrorState", SqlDbType.Int, 250);
            myCommand.Parameters["@O_iErrorState"].Direction = ParameterDirection.Output;
            myCommand.Parameters.Add("@oErrString", SqlDbType.VarChar, 255);
            myCommand.Parameters["@oErrString"].Direction = ParameterDirection.Output;
            SQNCLINE = SQNCLINE + 16384;
            strcon.Open();
            myCommand.ExecuteNonQuery();
        }
    }

    SqlCommand myCommand1 = new SqlCommand("taGLTransactionHeaderInsert", strcon);
    myCommand1.CommandType = CommandType.StoredProcedure;
    myCommand1.CommandText = "taGLTransactionHeaderInsert";

    myCommand1.Parameters.Add("@I_vBACHNUMB", SqlDbType.Char).Value = GLHdr.BACHNUMB;
    myCommand1.Parameters.Add("@I_vREFRENCE", SqlDbType.Char).Value = GLHdr.REFRENCE;
    myCommand1.Parameters.Add("@I_vJRNENTRY", SqlDbType.Int).Value = nextjournl.Trim();
    strcon.Open();
    myCommand1.ExecuteNonQuery();
}
for(i=0;i
快速的谷歌搜索会为您提供一些资源,让您开始使用。它找到了我,找到了我。我建议你去读一些关于这个话题的书,如果你遇到问题,回来问一些更具体的问题。该网站更关注于特定问题的解决方案,而不是一般的教程。你应该使用
SqlDbType一次性发送完整的数据。结构化的
我会将我想要的东西包装在一个事务中。感谢你的回复…我有点困惑,我一直在循环strored过程。每次它都在运行。但是对于做提交或回滚..我不会每次都做提交或回滚。所以当我在这种情况下提交或回滚时。