Sorry new to the newsgroups so please point me to where I need to be if this is the wrong group. Below is a chunck of code that I have written to play around with transactions in Visual Studion 2005. I want to be able to create a table, the columns in it, and add rows of data and if any of those statements fail I woudl like to rollback the entire transaction. My testing has shown that when the CREATE TABLE sql is issued it automatcially commits. In my example below the VER_INFO table is immediately created when the ExecuteNonQuery() statement is invoked. The next 2 insert statements are held correctly in the transaction, however when the second table, WADES_TEST is created that causes the 2 rows to be inserted and the second table is immediately created. So my commit statement is useless. Is this normal? Is there a way to force the system to keep the CREATE TABLE statement in the transaction so I can roll it back if needed?
OracleCommand cmd = new OracleCommand();
OracleConnection wConnection = new OracleConnection(wConnString);
wConnection.Open();
OracleTransaction trans = wConnection.BeginTransaction();
string wQry = "CREATE TABLE VER_INFO (VER NVARCHAR2(25))";
cmd.CommandText = wQry;
cmd.Connection = wConnection;
cmd.Transaction = trans;
try
{
cmd.ExecuteNonQuery();
wQry = "INSERT INTO VER_INFO VALUES ('INITIALIZED')";
OracleCommand cmd4 = new OracleCommand(wQry, wConnection, trans);
cmd4.ExecuteNonQuery();
wQry = "INSERT INTO VER_INFO VALUES ('testss')";
OracleCommand cmd2 = new OracleCommand(wQry, wConnection, trans);
cmd2.ExecuteNonQuery();
wQry = "CREATE TABLE WADES_TEST (WADE NVARCHAR2(25))";
OracleCommand cmd3 = new OracleCommand(wQry, wConnection, trans);
cmd3.ExecuteNonQuery();
trans.Commit();
wConnection.Dispose();
}
catch
{
trans.Rollback();
wConnection.Close();
}
Thanks in advance,
Wade Sharp
This might be more appropriate to be posted to an Oracle forum or newsgroup. Or to an ADO.NET forum.
No comments:
Post a Comment