Search code examples
c#asp.netstringstringbuilder

StringBuilder performance in small number of appending


 public DataTable dt_date(resbal obj)
{
    connection();

    string details = @"SELECT donor_contacts.name AS NAME, m_reserve_userdetails.res_no AS 'RESERVATION NO',
    m_room_user.build AS 'BUILDING',m_room.roomno AS 'ROOM NO',DATE_FORMAT(intime,'%r') AS 'CHECK-IN TIME',
    CASE WHEN m_room_user.rent =0 THEN 'Free'  ELSE 'Pass' END AS 'Passtype' FROM  m_reserve_userdetails,donor_contacts,m_room_user,m_room
    WHERE m_reserve_userdetails.id = donor_contacts.id 
    AND  m_room_user.donor_id = m_reserve_userdetails.user_id    
    AND m_reserve_userdetails.status=1 
    AND indate ='" + obj.date + "'";


    OdbcCommand cmd = new OdbcCommand(details, con);
    OdbcDataAdapter oda = new OdbcDataAdapter(cmd);
    DataTable dt = new DataTable();
    oda.Fill(dt);
    return dt;
}

OR

public DataTable dt_date(resbal obj) { connection();

StringBuilder datails = new StringBuilder();
datails.Append("SELECT donor_contacts.name AS NAME, ");
datails.Append("m_reserve_userdetails.res_no AS 'RESERVATION NO',");
datails.Append("m_room_user.build AS 'BUILDING',");
datails.Append("m_room.roomno AS 'ROOM NO',");
datails.Append("DATE_FORMAT(intime,'%r') AS 'CHECK-IN TIME',");
datails.Append("CASE WHEN m_room_user.rent =0 THEN 'Free'  ");
datails.Append("ELSE 'Pass' END AS 'Passtype' FROM  m_reserve_userdetails,");
datails.Append("donor_contacts,m_room_user,m_room");
datails.Append("WHERE m_reserve_userdetails.id = donor_contacts.id");
datails.Append("AND  m_room_user.donor_id = m_reserve_userdetails.user_id");
datails.Append("AND m_reserve_userdetails.status=1");
datails.Append("AND indate ='" + obj.date + "'");

OdbcCommand cmd = new OdbcCommand(datails.ToString(), con);
OdbcDataAdapter oda = new OdbcDataAdapter(cmd);
DataTable dt = new DataTable();
oda.Fill(dt);
return dt;

}

I wish to know, is stringBuilder works better than string even if there is only 8 or 10 appending? I tried a query on this as i added above. But i found no remarkable difference. This query takes time. Most probably it needs a query optimization, i know. But now, i need to know is there any little advance in using stringBuilder while there is only 8 to 10 appending. Thanks in advance.


Solution

  • From the point of performance, this:

    private const string details = "SELECT ... AND indate = '{0}'";
    
    string.Format(details, obj.date);
    

    is definitely better in your case, than StringBuilder or even string concatenations (but for formatting your string needs a little modification, and also you'll need a microscope to see the difference).

    From the point of common sense, string concatenations for SQL queries is a way to hell. Use parametrized queries:

    private const string details = "SELECT ... AND indate = @indate";