This blog describes how to convert .NET Data Provider for Teradata Learning Examples from C# to VB or C++.
.NET Data Provider for Teradata product installs Learning Examples in "<.NET Data Provider Installation Directory>\samples\LearningExamples" directory (e.g. "C:\Program Files\Teradata\NET Data Provider for Teradata\13.01.00\samples\LearningExamples"). These samples are written in C# language and we will ship VB samples some time in future.
But there is an easy way to convert the C# samples to VB as outlined below:
Download and install ".NET Reflector" from http://www.red-gate.com/products/dotnet-development/reflector/.
Compile one C# sample; see "<.NET Data Provider Installation Directory>\ samples\LearningExamples\Readme.doc" for details.
Use ".NET Reflector" to open the resulting executable.
Find the "Main(String[]): Void" method; right click and select Disassemble.
Select "Visual Basic", "C#" or "MC++" from the toolbar.
For example I used the above procedure to convert:
static void Main(string[] args) { try { System.Console.WriteLine("Sample T20303TD: \n"); System.Console.WriteLine(" Looking for .NET Data Provider for Teradata..."); // Attempting to connect to Teradata System.Console.WriteLine(" Attempting to open a connection to Teradata via " + "the .NET Data Provider... \n"); // Create a TdConnection object. A Connection // represents a session with a specific database. Within the context // of a Connection, SQL commands are executed and results are returned. // Creating and opening a database connection with the given connection string. TdConnection con = new TdConnection(Constants.sConnection); con.Open(); System.Console.WriteLine(" User " + Constants.sUser + " connected."); System.Console.WriteLine(" Connection to Teradata established. \n"); try { // Create a TdCommand object. A command object executes // SQL commands on a specified Connection. In order to specify which // connection, set its connection property. Command.ExecuteReader will return // a TdDataReader which is used to read the result of a SQL command. // Command.ExecuteNonQuery will perform the specified SQL command but // will not return a reader. TdCommand cmd = con.CreateCommand(); try { // The following code will perform a SELECT query // on the table. cmd.CommandText = Constants.sSelect; TdParameter par1 = cmd.CreateParameter(); par1.Value = Constants.sDept; par1.ParameterName = "Dept"; par1.DbType = DbType.String; par1.Size = Constants.sDept.Length; cmd.Parameters.Add(par1); // ExecuteReader method is being used without passing the SchemaOnly // behavior because access to the ResultSet data is required TdDataReader reader = cmd.ExecuteReader(); try { // Display result set table column meta data displayRSMetaData(reader); System.Console.WriteLine("\n\n Using ExecuteReader() to execute the following" + " SQL command: \n\n"); System.Console.WriteLine(Constants.sSelect + '\n'); // Extract and display result set table data System.Console.WriteLine(); System.Console.WriteLine(" DISPLAYING RESULT SET DATA:"); System.Console.WriteLine(" ---------------------------"); int rowCount = 0; // result set row counter // If there are rows iterate through all returned values and display them if (reader.HasRows) { // While there is more to read while (reader.Read()) { rowCount++; // increment retrieved row counter // Extract column values String name = reader.GetString(0); int id = reader.GetInt32(1); // Geting BLOB String bFilename = Environment.CurrentDirectory + @"\output\" + id + ".jpg"; // Create a filestream to output BLOB to FileStream fs = new FileStream(bFilename, FileMode.Create, FileAccess.Write); try { // Create a buffer Byte[] bBuffer = new byte[100]; // Call reader.GetTdBlob which will return a TdBlob. // TdBlobs support chunking so bytes can be read incrementally. TdBlob blob = reader.GetTdBlob(3); long numOfBytes; do { // Fill the buffer with bytes from the reader numOfBytes = blob.Read(bBuffer, 0, Constants.BUFFERSIZE); // Write bytes to the filestream fs.Write(bBuffer, 0, Constants.BUFFERSIZE); } while (numOfBytes == Constants.BUFFERSIZE); // The last segment of bytes will not fill the entire buffer // so we will continue while the number of bytes read fill the // entire buffer. } finally { fs.Close(); } String cFilename = Environment.CurrentDirectory + @"\output\" + id + ".txt"; // Create a filestream to output CLOB to StreamWriter sw = File.CreateText(cFilename); // Geting CLOB try { // Create a buffer Char[] cBuffer = new char[100]; // Call reader.GetTdClob which will return a TdClob. // TdClobs support chunking so chars can be read incrementally. TdClob clob = reader.GetTdClob(2); long numOfChars; do { // Fill the buffer with chars from the reader numOfChars = clob.Read(cBuffer, 0, Constants.BUFFERSIZE); // Write bytes to the filestream sw.Write(cBuffer, 0, Constants.BUFFERSIZE); } while (numOfChars == Constants.BUFFERSIZE); // The last segment of chars will not fill the entire buffer // so we will continue while the number of chars read fill the // entire buffer. } finally { sw.Close(); } // get the interval data TdIntervalYear service = TdIntervalYear.Parse(reader.GetString(4)); TdIntervalDay workdays = TdIntervalDay.Parse(reader.GetString(5)); System.Console.WriteLine("\n ROW " + rowCount); System.Console.WriteLine(" ----------"); System.Console.WriteLine(" COLUMN empName : " + name); System.Console.WriteLine(" COLUMN empID : " + id); System.Console.WriteLine(" COLUMN empResume : Resume saved as " + cFilename); System.Console.WriteLine(" COLUMN empPhoto : Photo saved as " + bFilename); System.Console.WriteLine(" COLUMN empService : " + service.ToString()); System.Console.WriteLine(" COLUMN empWorkDays : " + workdays.ToString()); } } System.Console.WriteLine("\n " + reader.RecordsReturned + " Row(s) retrieved. \n"); } finally { reader.Close(); } } finally { cmd.Dispose(); System.Console.WriteLine(" Command Disposed. \n"); } } finally { // Close the connection System.Console.WriteLine(" Closing connection to Teradata..."); con.Close(); System.Console.WriteLine(" Connection to Teradata closed. \n"); } System.Console.WriteLine(" Sample T20303TD finished. \n"); } catch (DbException ex) { // A DbException was generated. Catch it and display // the error information. // Note that there could be multiple error objects chained // together. if (ex is TdException) { foreach (TdError err in ((TdException)ex).Errors) { System.Console.WriteLine(err.Message); } } System.Console.WriteLine(ex.Message); System.Console.WriteLine("*** DbException caught ***"); } catch (Exception ex) { // An exception of some other type has been generated. // Display the error information. System.Console.WriteLine(ex.Message); System.Console.WriteLine(ex.StackTrace); } }
to
Private Shared Sub Main(ByVal args As String()) Try Console.WriteLine("Sample T20303TD: "& ChrW(10)) Console.WriteLine(" Looking for .NET Data Provider for Teradata...") Console.WriteLine(" Attempting to open a connection to Teradata via the .NET Data Provider... "& ChrW(10)) Dim con As New TdConnection(Constants.sConnection) con.Open Console.WriteLine((" User "& Constants.sUser & " connected.")) Console.WriteLine(" Connection to Teradata established. "& ChrW(10)) Try Dim cmd As TdCommand = con.CreateCommand Try cmd.CommandText = Constants.sSelect Dim par1 As TdParameter = cmd.CreateParameter par1.Value = Constants.sDept par1.ParameterName = "Dept" par1.DbType = DbType.String par1.Size = Constants.sDept.Length cmd.Parameters.Add(par1) Dim reader As TdDataReader = cmd.ExecuteReader Try T20303TD.displayRSMetaData(reader) Console.WriteLine(ChrW(10) & ChrW(10) & " Using ExecuteReader() to execute the following SQL command: "& ChrW(10) & ChrW(10)) Console.WriteLine((Constants.sSelect & ChrW(10))) Console.WriteLine Console.WriteLine(" DISPLAYING RESULT SET DATA:") Console.WriteLine(" ---------------------------") Dim rowCount As Integer = 0 If reader.HasRows Then Do While reader.Read rowCount += 1 Dim name As String = reader.GetString(0) Dim id As Integer = reader.GetInt32(1) Dim bFilename As String = String.Concat(New Object() { Environment.CurrentDirectory, "\output\", id, ".jpg" }) Dim fs As New FileStream(bFilename, FileMode.Create, FileAccess.Write) Try Dim numOfBytes As Long Dim bBuffer As Byte() = New Byte(100 - 1) {} Dim blob As TdBlob = reader.GetTdBlob(3) Do numOfBytes = blob.Read(bBuffer, 0, Constants.BUFFERSIZE) fs.Write(bBuffer, 0, Constants.BUFFERSIZE) Loop While (numOfBytes = Constants.BUFFERSIZE) Finally fs.Close End Try Dim cFilename As String = String.Concat(New Object() { Environment.CurrentDirectory, "\output\", id, ".txt" }) Dim sw As StreamWriter = File.CreateText(cFilename) Try Dim numOfChars As Long Dim cBuffer As Char() = New Char(100 - 1) {} Dim clob As TdClob = reader.GetTdClob(2) Do numOfChars = clob.Read(cBuffer, 0, Constants.BUFFERSIZE) sw.Write(cBuffer, 0, Constants.BUFFERSIZE) Loop While (numOfChars = Constants.BUFFERSIZE) Finally sw.Close End Try Dim service As TdIntervalYear = TdIntervalYear.Parse(reader.GetString(4)) Dim workdays As TdIntervalDay = TdIntervalDay.Parse(reader.GetString(5)) Console.WriteLine((ChrW(10) & " ROW "& rowCount)) Console.WriteLine(" ----------") Console.WriteLine((" COLUMN empName : "& name)) Console.WriteLine((" COLUMN empID : "& id)) Console.WriteLine((" COLUMN empResume : Resume saved as "& cFilename)) Console.WriteLine((" COLUMN empPhoto : Photo saved as "& bFilename)) Console.WriteLine((" COLUMN empService : "& service.ToString)) Console.WriteLine((" COLUMN empWorkDays : "& workdays.ToString)) Loop End If Console.WriteLine((ChrW(10) & ""& reader.RecordsReturned & " Row(s) retrieved. "& ChrW(10))) Finally reader.Close End Try Finally cmd.Dispose Console.WriteLine(" Command Disposed. "& ChrW(10)) End Try Finally Console.WriteLine(" Closing connection to Teradata...") con.Close Console.WriteLine(" Connection to Teradata closed. "& ChrW(10)) End Try Console.WriteLine(" Sample T20303TD finished. "& ChrW(10)) Catch ex As DbException If TypeOf ex Is TdException Then Dim err As TdError For Each err In DirectCast(ex, TdException).Errors Console.WriteLine(err.Message) Next End If Console.WriteLine(ex.Message) Console.WriteLine("*** DbException caught ***") Catch ex As Exception Console.WriteLine(ex.Message) Console.WriteLine(ex.StackTrace) End Try End Sub
There are alternative methods of converting C# to VB; for example: http://msdn.microsoft.com/en-us/magazine/cc163652.aspx