4.2.5. MS DTC OLE DB Sample Application
The MS DTC OLE DB demo is located in the
<VIRTUOSO_INSTALLATION_DIRECTORY>\samples\odbc\MSDTCdemo2
folder. This demo shows usage of distributed transactions driven by MS DTC through OLE DB.
Setup
The sample works with two instances of Virtuoso server. Running MS DTC service is needed. The servers must be started with MS DTC support (see Virtuoso documentation).
The test needs two Virtuoso server instances running on ports 1111 and 1112
Description
The demo source is
voledbtest.cs
file in the
<VIRTUOSO_INSTALLATION_DIRECTORY>\samples\odbc\MSDTCdemo
directory. Several highlights of the most significant parts of code are presented below:
[TransactionAttribute(TransactionOption.Required)]
It is significant to set this attribute of class to enable automatic transaction initialization.
Create connections to appropriate servers:
string strConn = "Provider=VIRTOLEDB;Data Source=" + dsn1 + ";User Id=dba;Password=dba;Initial Catalog=Demo;Prompt=NoPrompt;"; string strConn2 = "Provider=VIRTOLEDB;Data Source=" + dsn2 + ";User Id=dba;Password=dba;Initial Catalog=Demo;Prompt=NoPrompt;"; obj_conn = new OleDbConnection(strConn); obj_conn2 = new OleDbConnection(strConn2);
And, finally, execute the SQL code in the context of distributed transaction:
OleDbCommand sqlc = new OleDbCommand ("ODBC_BENCHMARK(" + idx + ",1,1,12.00,\'noone\')"); sqlc.Connection = obj_conn; sqlc.ExecuteNonQuery(); sqlc = new OleDbCommand ("ODBC_BENCHMARK(" + idx + ",1,1,-12.00,\'noone\')"); sqlc.Connection = obj_conn2; sqlc.ExecuteNonQuery();