.net 如何使用c在windows应用程序中使用提交和回滚事务#
我正在使用windows应用程序。我有一个数据集。从这一点上,我使用for循环逐行读取数据。在for循环中,我使用存储过程将数据插入数据库(这个过程在内部for循环中进行) 但我怀疑我是在逐行读取数据并执行存储过程。如果在第三行中,如果得到错误的数据…我会得到异常。但在将两行插入数据库之前。 因此,如果所有数据都正确,我必须进行提交。如果不正确,我必须进行回滚 你能不能请任何人给我一个想法.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 -
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过程。每次它都在运行。但是对于做提交或回滚..我不会每次都做提交或回滚。所以当我在这种情况下提交或回滚时。