0

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

但我怀疑我正在逐行阅读并正在执行存储过程。如果在第 3 行中如果有错误的数据......我会遇到异常。但在将 2 行插入数据库之前。所以如果所有数据都是正确的,我就必须提交。如果不是,我必须回滚。

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

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();
}
4

0 回答 0