Using Transactional NTFS (TxF) with SQL Server in .NET

I just stumbled across the very new Transactional NTFS (TxF) .NET managed wrapper by Pietro Partescano and gave it a try.

TxF offers transactional protection for NTFS operations:

  • Atomic operations on single files.
    Makes writing files more robust.
  • Transactions for multi-file operations.
    Concurrent readers only see committed operations.
    Works with remote file shares too.
  • The TxF resource manager can participate in heterogeneous distributed transactions.
    Ex: spanning NFTS, SQL Server and MSMQ operations.

MSDN: About Transactional NTFS
MSDN Magazine article: Enhance Your Apps With File System Transactions
Wikipedia: Transactional NTFS

Sample using NTFS Transaction with SQL Server

CREATE TABLE [dbo].[DocumentLink](
	[DocumentID] [uniqueidentifier] ROWGUIDCOL primary key  NOT NULL,
	[Name] [varchar](255) UNIQUE  NOT NULL,
	[Type] [varchar](5) NULL)
Imports System.Transactions

Module Module1
    Private _testFolderPath = IO.Path.Combine(IO.Directory.GetParent(My.Application.Info.DirectoryPath).Parent.FullName, "TestFiles")

    Sub Main()
        Try
            Using tsc As New TransactionScope(TransactionScopeOption.RequiresNew,
                                              New TransactionOptions With {.IsolationLevel = IsolationLevel.ReadCommitted}),
                  DB As New FileStreamTestEntities

                'Create file in NTFS
                Dim filePath = IO.Path.Combine(_testFolderPath, "TestFile1.txt")
                Dim content = System.Text.Encoding.UTF8.GetBytes("My test data")
                Dim fileHandle = TxF.File.CreateAndWriteFile(filePath, TxF.File.CreationDisposition.CreatesNewfileAlways, content)

                'Insert link to file in database table
                DB.DocumentLinks.Add(New DocumentLink With {.DocumentID = Guid.NewGuid, .Name = filePath})
                DB.SaveChanges()

                tsc.Complete()
            End Using
            Console.WriteLine("done")
        Catch ex As Exception
            Console.WriteLine(ex.ToString)
        Finally
            Console.ReadLine()
        End Try
    End Sub

End Module

Über Peter Meinl

Perpetual Traveller, IT Consultant
Dieser Beitrag wurde unter Computers and Internet abgelegt und mit , , , , verschlagwortet. Setze ein Lesezeichen auf den Permalink.

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden /  Ändern )

Google Foto

Du kommentierst mit Deinem Google-Konto. Abmelden /  Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden /  Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden /  Ändern )

Verbinde mit %s