[dba-VB] ADO.Net

jwcolby jwcolby at colbyconsulting.com
Sun Apr 27 07:12:19 CDT 2008


LOL, now that I can readi it...  ;-)

 >> and voila' the converted VB.NET is below : (watch line wraps now - 
this is


Shamil Salakhetdinov wrote:
> Hello John,
> 
> OK, I will read the blog you mentioned later today...
> 
> I know it's not easy to convince you to change your mind when you are
> "driving your way full speed" :) And I'm not trying to - I'm just musing in
> this coding samples I post here testing this or that approach, which I might
> use in my own development...
> 
> <<<
> There are many things to consider when I program in .net, not the least 
> of which is simplicity.  
> May I say that proposed in C# solution is simple and almost ready to use in
> your scenario in one thread? And also ready to be converted into a
> multi-threading app/utility. And you don't need to translate in manually in
> VB.NET - just use this free tool:
> 
> http://labs.developerfusion.co.uk/convert/csharp-to-vb.aspx
> 
> or this one:
> 
> http://codeconverter.sharpdevelop.net/Convert.aspx 
> 
> and voila' the converted VB.NET is below : (watch line wraps now - this is
> VB.NET - it was "automagically" converted by referred above tool by copying
> and pasting C# code I posted yesterday + making some manual editing of
> several code line to make it independent of my testing/development
> environment) - and it seems to work even quicker than C# equivalent somehow
> !?. I have got additional back VB.NET -> C# conversion in the end of this
> message - you can use C# code copy and paste it in the tool refereed above
> and get VB.NET code properly formatted. Proposal: let's post C# code here
> for the folks who will try this code to not spend time with fixing line
> wraps introduced by e-mail clients):
> 
> Imports System 
> Imports System.Collections.Generic 
> Imports System.Data.SqlClient 
> 
> Namespace TestSamples
> 
>     Public Class DataItem
>         Public ID As Integer
>         Public Name As String
> 
>         Public Sub New(ByVal id As Integer, ByVal name As String)
>             ID = id
>             Name = name
>         End Sub
> 
>         Public ReadOnly Property ParsedName() As String
>             Get
>                 ' just for testing purposes 
>                 ' return real parsed name here 
>                 Return Name
>             End Get
>         End Property
>     End Class
> 
>     Public Class DataProcessor
>         Private Const COUNT_SQL As String = "select count(*) from
> zsysUserSessionTrace"
>         Private Const PAGED_SELECT_SQL As String = "SELECT * from " + "(" +
> " select " + " Cast(ROW_NUMBER() over (ORDER BY [UserSessionTraceId]) as
> int) as RowNum, " + " UserSessionTraceId, " + " HostAddress, " + "
> UserBrowser " + " from zsysUserSessionTrace " + ") s " + "where s.RowNum
> between {0} and {1}"
>         Private Const UPDATE_SQL As String = "update zsysUserSessionTrace
> set UserBrowser = '{0}' where UserSessionTraceId = {1}"
> 
>         Private Const DEFAULT_BATCH_SIZE As Integer = 1000
> 
>         Private _totalCount As Integer = -1
>         Public ReadOnly Property TotalCount() As Integer
>             Get
>                 Return _totalCount
>             End Get
>         End Property
> 
>         Private _currentBatchStartRowNum As Integer = 0
>         Private _batchSize As Integer = 0
> 
>         Private _connectionString As String
>         Public Sub New(ByVal connectionString As String)
>             initialize(connectionString, DEFAULT_BATCH_SIZE)
>         End Sub
>         Public Sub New(ByVal connectionString As String, ByVal batchSize As
> Integer)
>             initialize(connectionString, batchSize)
>         End Sub
>         Private Sub initialize(ByVal connectionString As String, ByVal
> batchSize As Integer)
> 
>             _batchSize = batchSize
>             _currentBatchStartRowNum = 1
>             _connectionString = connectionString
> 
>             Using cnn As New
> System.Data.SqlClient.SqlConnection(connectionString)
>                 cnn.Open()
> 
>                 Dim cmd As System.Data.SqlClient.SqlCommand =
> cnn.CreateCommand()
>                 cmd.CommandText = COUNT_SQL
>                 cmd.CommandType = System.Data.CommandType.Text
> 
>                 _totalCount = CInt(cmd.ExecuteScalar())
>             End Using
>         End Sub
> 
>         Public ReadOnly Property HasData() As Boolean
>             Get
>                 Return (TotalCount > 0 AndAlso _currentBatchStartRowNum <
> TotalCount)
>             End Get
>         End Property
> 
>         Public Function GetData() As List(Of DataItem)
>             Using cnn As New
> System.Data.SqlClient.SqlConnection(_connectionString)
>                 cnn.Open()
> 
>                 Dim cmd As System.Data.SqlClient.SqlCommand =
> cnn.CreateCommand()
>                 Dim sql As String = String.Format(PAGED_SELECT_SQL,
> _currentBatchStartRowNum, _currentBatchStartRowNum + _batchSize)
>                 cmd.CommandText = sql
>                 cmd.CommandType = System.Data.CommandType.Text
>                 _currentBatchStartRowNum += _batchSize + 1
>                 Dim rdr As System.Data.SqlClient.SqlDataReader =
> cmd.ExecuteReader(System.Data.CommandBehavior.SequentialAccess)
> 
>                 Dim list As New List(Of DataItem)()
>                 While rdr.Read()
>                     list.Add(New DataItem(CInt(rdr(1)), DirectCast(rdr(3),
> String)))
>                 End While
>                 Return list
>             End Using
>         End Function
> 
>         Public Function Update(ByVal item As DataItem) As Integer
>             Using cnn As New
> System.Data.SqlClient.SqlConnection(_connectionString)
>                 cnn.Open()
> 
>                 Dim cmd As System.Data.SqlClient.SqlCommand =
> cnn.CreateCommand()
>                 Dim sql As String = String.Format(UPDATE_SQL,
> item.ParsedName, item.ID)
>                 cmd.CommandText = sql
>                 cmd.CommandType = System.Data.CommandType.Text
>                 Return cmd.ExecuteNonQuery()
>             End Using
>         End Function
>     End Class
> 
> 
>     Public Class A_MainEntry
>         '27.04.2008 12:45:58
>         'Count(*) = 25045
>         'Counter = 25045
>         '27.04.2008 12:46:04
> 
>         Public Shared Sub Main()
>             Dim count As Integer = 0
>             Try
>                 '+ customize - set your connection string here 
>                 Dim pcName As String = "SPB"
>                 Dim dbName As String = "dbName"
>                 Dim userName As String = "sa"
>                 Dim password As String = "sapwd"
>                 Dim connectionString As String = _
>                    String.Format("Data Source={0}\SQLEXPRESS;Initial
> Catalog={1};User Id={2};Password={3}", _
>                       pcName, dbName, userName, password)
>                 '- 
> 
>                 Console.WriteLine(DateTime.Now)
>                 Dim p As New DataProcessor(connectionString)
>                 While p.HasData
>                     Dim list As List(Of DataItem) = p.GetData()
>                     For Each item As DataItem In list
>                         p.Update(item)
>                         count += 1
>                     Next
>                 End While
>                 Console.WriteLine("Count(*) = {0}", p.TotalCount)
>                 Console.WriteLine("Counter = {0}", count)
>                 Console.WriteLine(DateTime.Now)
>             Catch ex As Exception
>                 Console.WriteLine(ex.Message)
>             End Try
>         End Sub
> 
>     End Class
> End Namespace
> 
> Here it's converted back to C#:
> 
> //http://labs.developerfusion.co.uk/convert/csharp-to-vb.aspx 
> //http://codeconverter.sharpdevelop.net/Convert.aspx 
> 
> using System;
> using System.Collections.Generic;
> using System.Data.SqlClient;
> 
> namespace TestSamples
> {
> 
>     public class DataItem
>     {
>         public int ID;
>         public string Name;
> 
>         public DataItem(int id, string name)
>         {
>             ID = id;
>             Name = name;
>         }
> 
>         public string ParsedName
>         {
>             // just for testing purposes 
>             // return real parsed name here 
>             get { return Name; }
>         }
>     }
> 
>     public class DataProcessor
>     {
>         private const string COUNT_SQL = "select count(*) from
> zsysUserSessionTrace";
>         private const string PAGED_SELECT_SQL = "SELECT * from " + "(" + "
> select " + " Cast(ROW_NUMBER() over (ORDER BY [UserSessionTraceId]) as int)
> as RowNum, " + " UserSessionTraceId, " + " HostAddress, " + " UserBrowser "
> + " from zsysUserSessionTrace " + ") s " + "where s.RowNum between {0} and
> {1}";
>         private const string UPDATE_SQL = "update zsysUserSessionTrace set
> UserBrowser = '{0}' where UserSessionTraceId = {1}";
> 
>         private const int DEFAULT_BATCH_SIZE = 1000;
> 
>         private int _totalCount = -1;
>         public int TotalCount
>         {
>             get { return _totalCount; }
>         }
> 
>         private int _currentBatchStartRowNum = 0;
>         private int _batchSize = 0;
> 
>         private string _connectionString;
>         public DataProcessor(string connectionString)
>         {
>             initialize(connectionString, DEFAULT_BATCH_SIZE);
>         }
>         public DataProcessor(string connectionString, int batchSize)
>         {
>             initialize(connectionString, batchSize);
>         }
>         private void initialize(string connectionString, int batchSize)
>         {
> 
>             _batchSize = batchSize;
>             _currentBatchStartRowNum = 1;
>             _connectionString = connectionString;
> 
>             using (System.Data.SqlClient.SqlConnection cnn = new
> System.Data.SqlClient.SqlConnection(connectionString))
>             {
>                 cnn.Open();
> 
>                 System.Data.SqlClient.SqlCommand cmd = cnn.CreateCommand();
>                 cmd.CommandText = COUNT_SQL;
>                 cmd.CommandType = System.Data.CommandType.Text;
> 
>                 _totalCount = (int)cmd.ExecuteScalar();
>             }
>         }
> 
>         public bool HasData
>         {
>             get { return (TotalCount > 0 && _currentBatchStartRowNum <
> TotalCount); }
>         }
> 
>         public List<DataItem> GetData()
>         {
>             using (System.Data.SqlClient.SqlConnection cnn = new
> System.Data.SqlClient.SqlConnection(_connectionString))
>             {
>                 cnn.Open();
> 
>                 System.Data.SqlClient.SqlCommand cmd = cnn.CreateCommand();
>                 string sql = string.Format(PAGED_SELECT_SQL,
> _currentBatchStartRowNum, _currentBatchStartRowNum + _batchSize);
>                 cmd.CommandText = sql;
>                 cmd.CommandType = System.Data.CommandType.Text;
>                 _currentBatchStartRowNum += _batchSize + 1;
>                 System.Data.SqlClient.SqlDataReader rdr =
> cmd.ExecuteReader(System.Data.CommandBehavior.SequentialAccess);
> 
>                 List<DataItem> list = new List<DataItem>();
>                 while (rdr.Read())
>                 {
>                     //error in automated conversion => list.Add(new
> DataItem((int)rdr(1), (string)rdr(3)));
>                     list.Add(new DataItem((int)rdr[1], (string)rdr[3]));
>                 }
>                 return list;
>             }
>         }
> 
>         public int Update(DataItem item)
>         {
>             using (System.Data.SqlClient.SqlConnection cnn = new
> System.Data.SqlClient.SqlConnection(_connectionString))
>             {
>                 cnn.Open();
> 
>                 System.Data.SqlClient.SqlCommand cmd = cnn.CreateCommand();
>                 string sql = string.Format(UPDATE_SQL, item.ParsedName,
> item.ID);
>                 cmd.CommandText = sql;
>                 cmd.CommandType = System.Data.CommandType.Text;
>                 return cmd.ExecuteNonQuery();
>             }
>         }
>     }
> 
> 
>     public class A_MainEntry
>     {
>         // VB.NET
>         //27.04.2008 13:01:44
>         //Count(*) = 25045
>         //Counter = 25045
>         //27.04.2008 13:01:49
> 
>         // C#
>         //27.04.2008 13:00:56
>         //Count(*) = 25045
>         //Counter = 25045
>         //27.04.2008 13:01:04
> 
>         public static void Main()
>         {
>             int count = 0;
>             try
>             {
>                 //+ customize - set your connection string here 
>                 string pcName = "SPB";
>                 string dbName = "dbName";
>                 string userName = "sa";
>                 string password = "sapwd";
>                 string connectionString = string.Format("Data
> Source={0}\\SQLEXPRESS;Initial Catalog={1};User Id={2};Password={3}",
> pcName, dbName, userName, password);
>                 //- 
> 
>                 Console.WriteLine(DateTime.Now);
>                 DataProcessor p = new DataProcessor(connectionString);
>                 while (p.HasData)
>                 {
>                     List<DataItem> list = p.GetData();
>                     foreach (DataItem item in list)
>                     {
>                         p.Update(item);
>                         count += 1;
>                     }
>                 }
>                 Console.WriteLine("Count(*) = {0}", p.TotalCount);
>                 Console.WriteLine("Counter = {0}", count);
>                 Console.WriteLine(DateTime.Now);
>             }
>             catch (Exception ex)
>             {
>                 Console.WriteLine(ex.Message);
>             }
>         }
> 
>     }
> }
> 
> -----Original Message-----
> From: dba-vb-bounces at databaseadvisors.com
> [mailto:dba-vb-bounces at databaseadvisors.com] On Behalf Of jwcolby
> Sent: Sunday, April 27, 2008 4:46 AM
> To: Discussion concerning Visual Basic and related programming issues.
> Subject: Re: [dba-VB] ADO.Net
> 
> This is the blog I mentioned:
> 
> http://blogs.msdn.com/dataaccess/archive/2005/05/19/420065.aspx
> <<< tail skipped to get message through in AccessD >>>
> 
> _______________________________________________
> dba-VB mailing list
> dba-VB at databaseadvisors.com
> http://databaseadvisors.com/mailman/listinfo/dba-vb
> http://www.databaseadvisors.com
> 
> 

-- 
John W. Colby
www.ColbyConsulting.com



More information about the dba-VB mailing list