我正在使用 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();
}