DotNET Schools

Blogs & Tutorials for Microsoft.NET and Leading web Technologies

Capture SOAP Request using Fiddler

Sometimes you are not able to Capture Soap request using fiddler. In that case you have to make some changes in config file.

Add these lines to web.config files:

  1. <system.net>  
  2.    <defaultProxy>  
  3.       <proxy bypassonlocal="False" usesystemdefault="True" proxyaddress="http://127.0.0.1:8888" />  
  4.    </defaultProxy>  
  5. </system.net>  

Using Struct as Directive in C# 6 & C# 7

AS we know that before C# 6 we use to include only namespaces as “using directive” But in C# 6 & C# 7 we can include static classes, enum, non-static classes & structs too as “using directive”.

In this code snippet I am going to show you a sample code for “using Struct as directive” so that you can aware about its syntax and usage. You may be interested in code snippet of,

1.   1. Using Static Classes as directive

2.   2. Using non-Static classes as directive

3.   3. Using Enum as directive

Below is the code snippet of “Using Struct as directive”,

  1. using static System.Drawing.Color; //struct  
  2. using static System.DateTime; //struct  
  3. using static System.Console;  
  4.   
  5. namespace UsingStructAsDirectiveinCSharp6n7  
  6. {  
  7.     class Program  
  8.     {  
  9.         static void Main(string[] args)  
  10.         {  
  11.             //you may need to add System.Drawing assembly reference   
  12.             //for "using static System.Drawing.Color"  
  13.             var color =Red; //System.Drawing.Color              
  14.   
  15.             var isLeapyear = IsLeapYear(2016); //System.DateTime  
  16.   
  17.             WriteLine($"Today is: " + Now.DayOfWeek); //System.DateTime            
  18.   
  19.         }  
  20.     }  
  21. }  

Variable.ToString() vs. Convert.ToString(variable)

variable.ToString() and Convert.ToString(variable) both are used for converting data into string. But the main difference is that Convert.ToString() handles null, while ToString() doesn't handle null value.

Apart from that both works almost same. Let’s take an example to explain it:
  1. double amount = 10000.0;  
  2. Console.WriteLine(amount.ToString());  
  3. Console.WriteLine(Convert.ToString(amount));   
In this case both method will convert “amount” to string and will return the same value but in case of null value variable.ToString() method will throw exception.

Now take another example:

  1. object myObject = null;  
  2. string myString;  
  3.   
  4. //myString = myObject.ToString();  
  5. // System.NullReferenceException : { "Object reference not set to an instance of an object."}  
  6.   
  7. myString = Convert.ToString(myObject);  
  8. //return empty string

Getting More than 2 Values for an Enum Item

As we know that we can get Enum and it value from an Enum type e.g. I want to create an enum for sorting of article like below:

  1. enum ArticleSortingOptions  
  2. {  
  3.    MostPopularArticle =1,  
  4.    LatestArticles =2,  
  5.    FeaturedArtilces =3,  
  6.    MostLikedArtilces =4,  
  7.    MostCommentedArtilces=5  
  8. }  

And accessing it like

  1. WriteLine(MostPopularArticle.ToString());  
  2. WriteLine((int)MostPopularArticle);  

Output

MostPopularArticle

1

you may be thinking that I am aceesing enum item without enum name. Yes, it is possible in C# 6 & C# 7 that we can acess enum items without enum name for that we have to write enum name in using statement i.e.

  1. using static MultiValuedEnum.ArticleSortingOptions;  

You will never prefer to display the value like “MostPopularArticle” but to be displayed like “Most Popular Article”. As we know that enum will not allow you to write an item with spaces. So we will require 3 types of values

1. Integer value of enum item.

2.   2. Name of enum Item (string Value of enum).

3.   3. Description of Enum (or some other value as per requirement).

We can achieve this by writing and extension method for enum.

  1. public static class ExtendEnum  
  2. {  
  3.    public static string DisplayString<T>(this T enumVal)  
  4.    {  
  5.       FieldInfo fi = enumVal.GetType().GetField(enumVal.ToString());  
  6.       var attrs = fi?.GetCustomAttributes(typeof(DescriptionAttribute), true);  
  7.       if (attrs != null && attrs.Length > 0)  
  8.       {  
  9.          return ((DescriptionAttribute)attrs[0]).Description;  
  10.       }  
  11.       return "No Description found";  
  12.    }  
  13. }  

And access like:

  1. WriteLine(MostPopularArticle.ToString());  
  2. WriteLine((int)MostPopularArticle);  
  3. WriteLine(MostPopularArticle.DisplayString());  

Complete Code:

  1. using System.ComponentModel;  
  2. using System.Reflection;  
  3. using static MultiValuedEnum.ArticleSortingOptions;  
  4. using static System.Console;  
  5.   
  6. namespace MultiValuedEnum  
  7. {  
  8.     enum ArticleSortingOptions  
  9.     {  
  10.         [Description("Most Popular Article")]  
  11.         MostPopularArticle = 1,          
  12.         LatestArticles = 2,  
  13.         FeaturedArtilces = 3,  
  14.         MostLikedArtilces = 4,  
  15.         MostCommentedArtilces = 5  
  16.     }  
  17.     class Program  
  18.     {  
  19.         static void Main(string[] args)  
  20.         {  
  21.             WriteLine(MostPopularArticle.ToString());  
  22.             WriteLine((int)MostPopularArticle);  
  23.             WriteLine(MostPopularArticle.DisplayString());  
  24.         }  
  25.     }  
  26.   
  27.     public static class ExtendEnum  
  28.     {  
  29.         public static string DisplayString<T>(this T enumVal)  
  30.         {  
  31.             FieldInfo fi = enumVal.GetType().GetField(enumVal.ToString());  
  32.             var attrs = fi?.GetCustomAttributes(typeof(DescriptionAttribute), true);  
  33.             if (attrs != null && attrs.Length > 0)  
  34.             {  
  35.                 return ((DescriptionAttribute)attrs[0]).Description;  
  36.             }  
  37.             return "No Description found";  
  38.         }  
  39.     }  
  40. }  

Output

MostPopularArticle

1

Most Popular Article

Converting Enum to Different Format

  1.  //way 1              
  2.  Enum MyNewEnum = (MyColors)Enum.Parse(typeof(MyColors), "RED");         
  3.   
  4.  //Way 2   
  5.  Enum MyNewEnum2 = (MyColors)Enum.Parse(typeof(MyColors), "1");  
  6.   
  7.  //Way 3  
  8.  Enum MyNewEnum3 = (MyColors)1;  
  9.   
  10.  //Way 4  
  11.  Enum MyNewEnum4 = (MyColors)Enum.ToObject(typeof(MyColors), 1);  
  12.   
  13.  //Way 5  
  14.  Enum MyNewEnum5 = (MyColors)3;  
  15.   
  16.  //Way 6  
  17.  string myEnumString  = ((MyColors)1).ToString("F");  
  18.  string myEnumString2 = ((MyColors)1).ToString("F");  
  19.   
  20.  string myEnumString3 = MyColors.BLUE.ToString("d");  
  21.  string myEnumString4 = MyColors.BLUE.ToString("D");  
  22.                                  
  23.  string myEnumString5 = MyColors.BLUE.ToString("g");  
  24.  string myEnumString6 = MyColors.BLUE.ToString("G");  
  25.                                  
  26.  string myEnumString7 = MyColors.BLUE.ToString("x");  
  27.  string myEnumString8 = MyColors.BLUE.ToString("X");  
  28.   
  29.  //Way 7  
  30.  string[] colorrList  = Enum.GetNames(typeof(MyColors));  
  31.  string myEnumString9 = Enum.GetName(typeof(MyColors), 5);  
  32.   
  33.  //way 8  
  34. string myFormatEnumString1 = Enum.Format(typeof(MyColors), MyColors.ORANGE, "d");  
  35. string myFormatEnumString2 = Enum.Format(typeof(MyColors), MyColors.ORANGE, "D");  
  36. string myFormatEnumString3 = Enum.Format(typeof(MyColors), MyColors.ORANGE, "f");  
  37. string myFormatEnumString4 = Enum.Format(typeof(MyColors), MyColors.ORANGE, "F");  
  38. string myFormatEnumString5 = Enum.Format(typeof(MyColors), MyColors.ORANGE, "g");  
  39. string myFormatEnumString6 = Enum.Format(typeof(MyColors), MyColors.ORANGE, "G");  
  40. string myFormatEnumString7 = Enum.Format(typeof(MyColors), MyColors.ORANGE, "x");  
  41. string myFormatEnumString8 = Enum.Format(typeof(MyColors), MyColors.ORANGE, "X");  

Read and Write XML File using XMLDocument

Read & Write XML File using XMLDocument

Write XML File Using Xml Writer,
  1. public void WriteXMLFileUsingXmlWriter()  
  2. {  
  3.     List < LumiaMobile > LumiaMobiles = new List < LumiaMobile > ();  
  4.     LumiaMobiles.Add(new LumiaMobile  
  5.     {  
  6.         ModelId = "lumia550",  
  7.             Height = "136.1 mm",  
  8.             Width = "67.8 mm",  
  9.             Thickness = "9.9 mm",  
  10.             Weight = "141.9 g"  
  11.     });  
  12.     LumiaMobiles.Add(new LumiaMobile  
  13.     {  
  14.         ModelId = "lumia950",  
  15.             Height = "145 mm",  
  16.             Width = "73.2 mm",  
  17.             Thickness = "8.2 mm",  
  18.             Weight = "150 g"  
  19.     });  
  20.     LumiaMobiles.Add(new LumiaMobile  
  21.     {  
  22.         ModelId = "Text",  
  23.             Height = "",  
  24.             Width = "",  
  25.             Thickness = "8.2 mm",  
  26.             Weight = "150 g"  
  27.     });  
  28.     using(XmlWriter writer = XmlWriter.Create("LumiaMobiles.xml"))  
  29.     {  
  30.         writer.WriteStartDocument();  
  31.         writer.WriteStartElement("LumiaMobiles");  
  32.         foreach(LumiaMobile lumiaMobile in LumiaMobiles)  
  33.         {  
  34.             writer.WriteStartElement(lumiaMobile.ModelId);  
  35.             writer.WriteElementString("Height", lumiaMobile.Height);  
  36.             writer.WriteElementString("Width", lumiaMobile.Width);  
  37.             writer.WriteElementString("Thickness", lumiaMobile.Thickness);  
  38.             writer.WriteElementString("Weight", lumiaMobile.Weight);  
  39.             writer.WriteEndElement();  
  40.         }  
  41.         writer.WriteEndElement();  
  42.         writer.WriteEndDocument();  
  43.     }  
  44. }  
The above code snippet will write XML file in single line i.e. not formatted, all content in same line. 
  1. <?xml version="1.0" encoding="utf-8"?>  
  2.     <LumiaMobiles>  
  3.         <lumia550>  
  4.             <Height>136.1 mm</Height>  
  5.             <Width>67.8 mm</Width>  
  6.             <Thickness>9.9 mm</Thickness>  
  7.             <Weight>141.9 g</Weight>  
  8.         </lumia550>  
  9.         <lumia950>  
  10.             <Height>145 mm</Height>  
  11.             <Width>73.2 mm</Width>  
  12.             <Thickness>8.2 mm</Thickness>  
  13.             <Weight>150 g</Weight>  
  14.         </lumia950>  
  15.         <Text>  
  16.             <Height />  
  17.             <Width />  
  18.             <Thickness>8.2 mm</Thickness>  
  19.             <Weight>150 g</Weight>  
  20.         </Text>  
  21.     </LumiaMobiles>  
So to write formatted XML data we can use XmlTextWriter,
 
Write XML File Using Xml TextWriter,
  1. public void WriteXMLFileUsingXmlTextWriter()  
  2. {  
  3.     List < LumiaMobile > LumiaMobiles = new List < LumiaMobile > ();  
  4.     LumiaMobiles.Add(new LumiaMobile  
  5.     {  
  6.         ModelId = "lumia550",  
  7.             Height = "136.1 mm",  
  8.             Width = "67.8 mm",  
  9.             Thickness = "9.9 mm",  
  10.             Weight = "141.9 g"  
  11.     });  
  12.     LumiaMobiles.Add(new LumiaMobile  
  13.     {  
  14.         ModelId = "lumia950",  
  15.             Height = "145 mm",  
  16.             Width = "73.2 mm",  
  17.             Thickness = "8.2 mm",  
  18.             Weight = "150 g"  
  19.     });  
  20.     LumiaMobiles.Add(new LumiaMobile  
  21.     {  
  22.         ModelId = "Text",  
  23.             Height = "",  
  24.             Width = "",  
  25.             Thickness = "8.2 mm",  
  26.             Weight = "150 g"  
  27.     });  
  28.     string filename = "LumiaMobiles.xml";  
  29.     using(XmlTextWriter writer = new XmlTextWriter(new StreamWriter(new FileStream(filename, FileMode.Create))))  
  30.     {  
  31.         writer.Formatting = Formatting.Indented;  
  32.         writer.Indentation = 4;  
  33.         writer.WriteStartDocument();  
  34.         writer.WriteStartElement("LumiaMobiles");  
  35.         foreach(LumiaMobile lumiaMobile in LumiaMobiles)  
  36.         {  
  37.             writer.WriteStartElement(lumiaMobile.ModelId);  
  38.             writer.WriteElementString("Height", lumiaMobile.Height);  
  39.             writer.WriteElementString("Width", lumiaMobile.Width);  
  40.             writer.WriteElementString("Thickness", lumiaMobile.Thickness);  
  41.             writer.WriteElementString("Weight", lumiaMobile.Weight);  
  42.             writer.WriteEndElement();  
  43.         }  
  44.         writer.WriteEndElement();  
  45.         writer.WriteEndDocument();  
  46.     }  
  47. }  
It will write XML file as: 
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LumiaMobiles>  
  3.     <lumia550>  
  4.         <Height>136.1 mm</Height>  
  5.         <Width>67.8 mm</Width>  
  6.         <Thickness>9.9 mm</Thickness>  
  7.         <Weight>141.9 g</Weight>  
  8.     </lumia550>  
  9.     <lumia950>  
  10.         <Height>145 mm</Height>  
  11.         <Width>73.2 mm</Width>  
  12.         <Thickness>8.2 mm</Thickness>  
  13.         <Weight>150 g</Weight>  
  14.     </lumia950>  
  15.     <Text>  
  16.         <Height />  
  17.         <Width />  
  18.         <Thickness>8.2 mm</Thickness>  
  19.         <Weight>150 g</Weight>  
  20.     </Text>  
  21. </LumiaMobiles>   
Now use the below code to Read the above XML File,
  1. public void ReadXMLFile(string xmlFileName)  
  2. {  
  3.     XmlDocument xmlDocument = new XmlDocument();  
  4.     xmlDocument.Load(xmlFileName);  
  5.     XmlNodeList nodeList = xmlDocument.SelectNodes("LumiaMobiles");  
  6.     foreach(XmlNode node in nodeList)  
  7.     {  
  8.         XmlNodeList lumianodes = node.ChildNodes;  
  9.         foreach(XmlNode item in lumianodes)  
  10.         {  
  11.             Console.WriteLine("ModelID : {0}", item.Name);  
  12.             Console.WriteLine("Height: {0}", item.SelectSingleNode("Height").InnerText);  
  13.             Console.WriteLine("Width: {0}", item.SelectSingleNode("Width").InnerText);  
  14.             Console.WriteLine("Thickness: {0}", item.SelectSingleNode("Thickness").InnerText);  
  15.             Console.WriteLine("Weight: {0}", item.SelectSingleNode("Weight").InnerText);  
  16.             Console.WriteLine();  
  17.         }  
  18.     }  
  19.     Console.ReadKey();  
  20. }  

    Learn C # 7.x (articles on C# 7.0, C# 7.1 & 7.2 new features)

      



    Learn C# 7.0, C# 7.1 & C# 7.2 new features by the collection of articles written by Banketeshvar Narayan


    Find Any String from a Database in SQL Server

    In SQL Server sometimes we get some data for which we are not sure that from which table it is coming the we can use the below stored procedure to find it.

    It has 3 input parameters:

    • @DataToSearch: Data which you want to search.
    • @DataToReplace: Data with which you want to replace.
    • @IsExactMatch: Search for exact matching or search any mathing data. If you want to search any matching data you can leave it blank.

    This stored procedure does not alter any value in database it only displays the list of table with column name which have the specified data. the @DataToReplace has value the it will show you an script to replace the value which you need to execute separately.

    1. CREATE PROCEDURE FindAnyStringFromTheDataBase  
    2.     @DataToSearch NVARCHAR(4000),  
    3.     @DataToReplace NVARCHAR(4000),  
    4.     @IsExactMatch BIT = 0  
    5. AS  
    6. SET NOCOUNT ON  
    7.    
    8. DECLARE @TempTable TABLE(RowId INT IDENTITY(1,1), SchemaName sysname, TableName sysname, ColumnName SysName, DataType VARCHAR(100), IsDataFound BIT)  
    9.    
    10.     INSERT  INTO @TempTable(TableName,SchemaName, ColumnName, DataType)  
    11.     SELECT  Col.Table_Name,Col.TABLE_SCHEMA, Col.Column_Name, Col.Data_Type  
    12.     FROM    Information_Schema.Columns AS Col  
    13.             INNER Join Information_Schema.Tables AS Tbl  
    14.                 ON Col.Table_Name = Tbl.Table_Name  
    15.         AND Col.TABLE_SCHEMA = Tbl.TABLE_SCHEMA  
    16.     WHERE   Table_Type = 'Base Table'  
    17.             And Data_Type In ('ntext','text','nvarchar','nchar','varchar','char')  
    18.    
    19.    
    20. DECLARE @i INT  
    21. DECLARE @MAXValue INT  
    22. DECLARE @TableName sysname  
    23. DECLARE @ColumnName sysname  
    24. DECLARE @SchemaName sysname  
    25. DECLARE @SQL NVARCHAR(4000)  
    26. DECLARE @PARAMETERS NVARCHAR(4000)  
    27. DECLARE @IsDataExists BIT  
    28. DECLARE @SQLTemplate NVARCHAR(4000)  
    29. DECLARE @dbName VARCHAR(100)  
    30.    
    31. SELECT  @SQLTemplate = CASE WHEN @IsExactMatch = 1  
    32.                             THEN 'If Exists(Select *  
    33.                                            From   ReplaceTableName  
    34.                                            Where  Convert(nVarChar(4000), [ReplaceColumnName])  
    35.                                                         = ''' + @DataToSearch + '''  
    36.                                            )  
    37.                                       Set @IsDataExists = 1  
    38.                                   Else  
    39.                                       Set @IsDataExists = 0'  
    40.                             ELSE 'If Exists(Select *  
    41.                                            From   ReplaceTableName  
    42.                                            Where  Convert(nVarChar(4000), [ReplaceColumnName])  
    43.                                                         Like ''%' + @DataToSearch + '%''  
    44.                                            )  
    45.                                       Set @IsDataExists = 1  
    46.                                   Else  
    47.                                       Set @IsDataExists = 0'  
    48.                             END,  
    49.         @PARAMETERS = '@IsDataExists Bit OUTPUT',  
    50.         @i = 1  
    51.    
    52. SELECT @i = 1, @MAXValue = MAX(RowId)  
    53. FROM   @TempTable  
    54.    
    55. WHILE @i <= @MAXValue  
    56.     BEGIN  
    57.         SELECT  @SQL = REPLACE(REPLACE(@SQLTemplate, 'ReplaceTableName', QUOTENAME(SchemaName) + '.' + QUOTENAME(TableName)), 'ReplaceColumnName', ColumnName)  
    58.         FROM    @TempTable  
    59.         WHERE   RowId = @i  
    60.    
    61.    
    62.         PRINT @SQL  
    63.         EXEC SP_EXECUTESQL @SQL, @PARAMETERS, @IsDataExists = @IsDataExists OUTPUT  
    64.    
    65.         IF @IsDataExists =1  
    66.             UPDATE @TempTable SET IsDataFound = 1 WHERE RowId = @i  
    67.    
    68.         SET @i = @i + 1  
    69.     END  
    70.    
    71. SET @dbName = DB_NAME()   
    72.    
    73. SELECT  SchemaName,@dbName as DB,TableName, ColumnName,  
    74.         'Update '+ @dbName+'.'+SchemaName+'.'+TableName+ ' SET '+ColumnName+ ' = replace('+ColumnName+','''+ @DataToSearch+''','''+@DataToReplace+''')' as Script  
    75. FROM    @TempTable  
    76. WHERE   IsDataFound = 1  
    77.   
    78. GO  

    Learn C# 6

    Learn C# 6 new features by the dozen of articles written by Banketeshvar Narayan.