Click here to Skip to main content
15,886,026 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
I have a method where i am using different Command objects to execute different SQL statements. Currently i am using the following code block-

C#
private static Voucher CreateEntity(Voucher voucher)
    {
        OleDbConnection Connection = new OleDbConnection(voucher.ConnectionString);

        OleDbCommand cmdInsert1 = new OleDbCommand("INSERT INTO table1(Field1, Field2,..) VALUES(Value1,Value2,..)", Connection);

        OleDbCommand cmdInsert2 = new OleDbCommand("INSERT INTO table2(Field1, Field2,..) VALUES(Value1,Value2,..)", Connection);

        OleDbCommand cmdLastId = new OleDbCommand("SELECT MAX(Field1) AS LastId FROM Table1", Connection);

        OleDbTransaction transaction = null;

        try
        {
            Connection.Open();
            transaction = Connection.BeginTransaction();

            cmdInsert1.Transaction = transaction;
            cmdInsert2.Transaction = transaction;
            cmdLastId.Transaction = transaction;

            cmdInsert1.ExecuteNonQuery();
            cmdInsert2.ExecuteNonQuery();

            object LastId = cmdLastId.ExecuteScalar();

            transaction.Commit();
            Connection.Close();
            //voucher.MarkOld();
            //return voucher;
        }
        catch (Exception ex)
        {
            if (transaction != null)
            {
                transaction.Rollback();
            }
            throw ex;
        }
    }


My question is, can i use single Command object here without declaring multiple Command objects? Specially, when using Transaction object?

For example, cmdInsert.CommandText=sqlString1, cmdInsert.CommandText=sqlString2,.. If I do so, is there any performance problem?

Regards
Saumitra Kumar Paul
Posted
Updated 21-Nov-12 20:29pm
v2

1 solution

Hi Saumitra,

You can execute multiple query by separating with semicolon ";".

Update your code as below.

C#
private static Voucher CreateEntity(Voucher voucher)
    {
        OleDbConnection Connection = new OleDbConnection(voucher.ConnectionString);
        string query = "INSERT INTO table1(Field1, Field2,..) VALUES(Value1,Value2,..);INSERT INTO table2(Field1, Field2,..) VALUES(Value1,Value2,..);SELECT MAX(Field1) AS LastId FROM Table1;";        
        OleDbCommand cmd = new OleDbCommand(query, Connection);
 
        OleDbTransaction transaction = null;
 
        try
        {
            Connection.Open();
            transaction = Connection.BeginTransaction();            
            cmd.Transaction = transaction;             
            object LastId = cmd.ExecuteScalar(); 
            transaction.Commit();
            Connection.Close();
            //voucher.MarkOld();
            //return voucher;
        }
        catch (Exception ex)
        {
            if (transaction != null)
            {
                transaction.Rollback();
            }
            throw ex;
        }
    }


Hope thi will help you.
 
Share this answer
 
v2
Comments
Saumitra Kumar Paul 22-Nov-12 3:03am    
@Mohd. Mukhtar, Thank you. I got the idea.
Mohd. Mukhtar 22-Nov-12 3:17am    
Then mark it as answer ;-)
Saumitra Kumar Paul 22-Nov-12 3:18am    
Let me wait for more opinions. Because you did not focus on performance issues.
Mohd. Mukhtar 22-Nov-12 3:23am    
cool

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900