How to call default contstructor from another one


One of my team mate asked me this question today. I was not aware of this before that.
Here is a code for the same,

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
public class A
    {
        public A()
        {
            Console.WriteLine("Default");
        }

        public A(string msg) : this()
        {
            Console.WriteLine("this is param : " + msg);
        }
    }
    
Now when you create instance of class A as,

1
A objA = new A("Hello");

It will print statements as;
Default
this is param : Hello

How to decide database connection instance dynamically ?


This was a question asked by one interviewer in my early interviews. The scenario was that,
an application makes use of several database providers. How one can decide which connection instance to be used at run time.
The answer lies in the question itslef. I couldn't figure it out at that time.

This can be achieved by ProviderName attribute available in ConnectionString format. Let's do it by an example.

Consider a connection string as,

1
2
3
4
5
6
7
8
<connectionStrings>
    <add name="LocalSqlServer"
    connectionString="data source=.\SQLEXPRESS;
    Integrated Security=SSPI;
    AttachDBFilename=|DataDirectory|aspnetdb.mdf;
    User Instance=true"
    providerName="System.Data.SqlClient" />
</connectionStrings>


Here we have ProviderName as 'System.Data.SqlClient'. The configuration can have multiple connectionStrings with different providerName values. We can retrive providerName value and can create an instance based upon it.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
ConnectionStringSettings connection =  ConfigurationManager.ConnectionStrings["LocalSqlServer"];
DbConnection db = null;
switch (connection.ProviderName)
{
    case "System.Data.SqlClient":
      db = new SqlConnection(connection.ConnectionString);
      break;
    case "System.Data.OleDb":
      db = new OleDbConnection(connection.ConnectionString);
      break;
    case "System.Data.Odbc":
      db = new OdbcConnection(connection.ConnectionString );
      break;
    case "System.Data.OracleClient":
      db = new OracleConnection(connection.ConnectionString);
      break;
}


Read CDATA section based on where clause using LINQ

Consider an XML as below;
<Book>
  <BookItem ISBN="SKS84747"><![CDATA[20]]> </BookItem>
  <BookItem ISBN="LHKGOI84747"><![CDATA[50]]> </BookItem>
  <BookItem ISBN="PUOT84747"><![CDATA[20]]> </BookItem>
</Book>

This code gives me all the CDATA sections,

var value = from v in x.Descendants("BookItem").OfType<XCData>()
                                select (string)v.Value;

In order to get CDATA of any particular node based on where clause we need to execute below query as,

var value = x.DescendantNodes().OfType<XCData>()
                .Where(m => m.Parent.Name == "BookItem" && m.Parent.Attribute("ISBN").Value == "PUOT84747")
                .ToList();

This statement will return all the CDATA sections matching in where clause.
To get the single item just replace .ToList() with .Select(cdata => cdata.Value.ToString());

var value = x.DescendantNodes().OfType<XCData>()
                .Where(m => m.Parent.Name == "BookItem" && m.Parent.Attribute("ISBN").Value == "PUOT84747")
                .Select(cdata => cdata.Value.ToString());