public void TransactionTest()
        {
            // Open a new connection to the network server running on localhost
            string host    = "localhost";
            int    port    = s_clientPort;
            string connStr = string.Format("server={0}:{1}", host, port);

            using (GFXDClientConnection conn = new GFXDClientConnection(connStr)) {
                conn.Open();

                // create a table
                GFXDCommand cmd = new GFXDCommand("create table t1 (id int primary" +
                                                  " key, addr varchar(20))", conn);
                cmd.ExecuteNonQuery();

                try {
                    GFXDTransaction tran = conn.BeginTransaction(IsolationLevel
                                                                 .ReadCommitted);
                    cmd.Transaction = tran;
                    // insert into the table using positional parameters
                    cmd = new GFXDCommand("insert into t1 (id, addr) values (?, ?)",
                                          conn);
                    cmd.Prepare();
                    for (int i = 0; i < s_numInserts; i++)
                    {
                        cmd.Parameters.Clear();
                        cmd.Parameters.Add(i);
                        cmd.Parameters.Add("addr" + i);

                        cmd.ExecuteNonQuery();
                    }
                    tran.Commit();

                    // check the inserts
                    VerifyInserts(conn, s_numInserts);

                    // fire some updates and if any unsuccessful then rollback the transaction
                    cmd.CommandText = "update t1 set addr = ? where id = ?";
                    tran            = conn.BeginTransaction(IsolationLevel.ReadCommitted);
                    cmd.Transaction = tran;
                    bool success = true;
                    for (int i = 100; i < 200; i++)
                    {
                        cmd.Parameters.Clear();
                        cmd.Parameters.Add("address" + i);
                        cmd.Parameters.Add(i);
                        if (cmd.ExecuteNonQuery() != 1)
                        {
                            // update failed; rolling back the entire transaction
                            success = false;
                            tran.Rollback();
                            break;
                        }
                    }
                    // command for verification
                    string verifyText = "select * from t1 where id >= 100 and id < 200";
                    if (success)
                    {
                        // verify the updates in transactional data
                        VerifyInserts(conn, verifyText, 100, 199, "address");
                        // all succeeded; commit the transaction
                        tran.Commit();
                        // verify the updates after commit
                        VerifyInserts(conn, verifyText, 100, 199, "address");
                    }
                    else
                    {
                        // verify no updates
                        VerifyInserts(conn, verifyText, 100, 199, "addr");
                    }
                } finally {
                    // drop the table
                    cmd = new GFXDCommand("drop table t1", conn);
                    cmd.ExecuteNonQuery();

                    conn.Close();
                }
            }
        }
Example #2
0
    public void TransactionTest()
    {
      // Open a new connection to the network server running on localhost
      string host = "localhost";
      int port = s_clientPort;
      string connStr = string.Format("server={0}:{1}", host, port);
      using (GFXDClientConnection conn = new GFXDClientConnection(connStr)) {
        conn.Open();

        // create a table
        GFXDCommand cmd = new GFXDCommand("create table t1 (id int primary" +
                                          " key, addr varchar(20))", conn);
        cmd.ExecuteNonQuery();

        try {
          GFXDTransaction tran = conn.BeginTransaction(IsolationLevel
                                                       .ReadCommitted);
          cmd.Transaction = tran;
          // insert into the table using positional parameters
          cmd = new GFXDCommand("insert into t1 (id, addr) values (?, ?)",
                                conn);
          cmd.Prepare();
          for (int i = 0; i < s_numInserts; i++) {
            cmd.Parameters.Clear();
            cmd.Parameters.Add(i);
            cmd.Parameters.Add("addr" + i);

            cmd.ExecuteNonQuery();
          }
          tran.Commit();

          // check the inserts
          VerifyInserts(conn, s_numInserts);

          // fire some updates and if any unsuccessful then rollback the transaction
          cmd.CommandText = "update t1 set addr = ? where id = ?";
          tran = conn.BeginTransaction(IsolationLevel.ReadCommitted);
          cmd.Transaction = tran;
          bool success = true;
          for (int i = 100; i < 200; i++) {
            cmd.Parameters.Clear();
            cmd.Parameters.Add("address" + i);
            cmd.Parameters.Add(i);
            if (cmd.ExecuteNonQuery() != 1) {
              // update failed; rolling back the entire transaction
              success = false;
              tran.Rollback();
              break;
            }
          }
          // command for verification
          string verifyText = "select * from t1 where id >= 100 and id < 200";
          if (success) {
            // verify the updates in transactional data
            VerifyInserts(conn, verifyText, 100, 199, "address");
            // all succeeded; commit the transaction
            tran.Commit();
            // verify the updates after commit
            VerifyInserts(conn, verifyText, 100, 199, "address");
          }
          else {
            // verify no updates
            VerifyInserts(conn, verifyText, 100, 199, "addr");
          }

        } finally {
          // drop the table
          cmd = new GFXDCommand("drop table t1", conn);
          cmd.ExecuteNonQuery();

          conn.Close();
        }
      }
    }